vft 0.0.427 → 0.0.429

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/index.css +1 -1
  2. package/es/components/carousel/use-carousel.js +1 -1
  3. package/es/components/dialog/use-dialog.js +21 -21
  4. package/es/components/horizontal-menu/index.d.ts +2 -10
  5. package/es/components/input/input.vue2.js +4 -4
  6. package/es/components/input-tag/composables/use-input-tag.js +1 -1
  7. package/es/components/md-container/md-container.vue2.js +106 -75
  8. package/es/components/md-container/use/index.d.ts +0 -1
  9. package/es/components/md-container/use/index.js +2 -4
  10. package/es/components/menu/index.d.ts +8 -0
  11. package/es/components/menu/menu-item.vue.d.ts +2 -2
  12. package/es/components/menu/menu-item.vue2.js +9 -10
  13. package/es/components/menu/menu.vue.d.ts +5 -1
  14. package/es/components/menu/menu.vue2.js +89 -82
  15. package/es/components/menu/sub-menu.vue.d.ts +3 -3
  16. package/es/components/menu/sub-menu.vue2.js +20 -24
  17. package/es/components/side-menu/index.d.ts +21 -0
  18. package/es/components/side-menu/index.js +3 -4
  19. package/es/components/side-menu/side-menu.vue.d.ts +12 -0
  20. package/es/components/side-menu/side-menu.vue2.js +157 -136
  21. package/es/components/side-menu/types.d.ts +3 -3
  22. package/es/components/side-menu/types.js +1 -1
  23. package/es/components/super-form/super-form-item.vue2.js +1 -1
  24. package/es/package.json.d.ts +1 -1
  25. package/es/package.json.js +1 -1
  26. package/es/utils/vue/vnode.js +1 -1
  27. package/lib/components/dialog/use-dialog.cjs +1 -1
  28. package/lib/components/horizontal-menu/index.d.ts +2 -10
  29. package/lib/components/input/input.vue2.cjs +1 -1
  30. package/lib/components/md-container/md-container.vue2.cjs +1 -1
  31. package/lib/components/md-container/use/index.cjs +1 -1
  32. package/lib/components/md-container/use/index.d.ts +0 -1
  33. package/lib/components/menu/index.d.ts +8 -0
  34. package/lib/components/menu/menu-item.vue.d.ts +2 -2
  35. package/lib/components/menu/menu-item.vue2.cjs +1 -1
  36. package/lib/components/menu/menu.vue.d.ts +5 -1
  37. package/lib/components/menu/menu.vue2.cjs +1 -1
  38. package/lib/components/menu/sub-menu.vue.d.ts +3 -3
  39. package/lib/components/menu/sub-menu.vue2.cjs +1 -1
  40. package/lib/components/side-menu/index.cjs +1 -1
  41. package/lib/components/side-menu/index.d.ts +21 -0
  42. package/lib/components/side-menu/side-menu.vue.d.ts +12 -0
  43. package/lib/components/side-menu/side-menu.vue2.cjs +1 -1
  44. package/lib/components/side-menu/types.cjs +1 -1
  45. package/lib/components/side-menu/types.d.ts +3 -3
  46. package/lib/package.json.cjs +1 -1
  47. package/lib/package.json.d.ts +1 -1
  48. package/package.json +4 -4
  49. package/theme-style/index.css +1 -1
  50. package/theme-style/src/md-container.scss +30 -3
  51. package/theme-style/vft-md-container.css +1 -1
  52. package/web-types.json +1 -1
  53. package/es/components/md-container/use/useActiveHeaderLinks.d.ts +0 -7
  54. package/es/components/md-container/use/useActiveHeaderLinks.js +0 -52
  55. package/lib/components/md-container/use/useActiveHeaderLinks.cjs +0 -1
  56. package/lib/components/md-container/use/useActiveHeaderLinks.d.ts +0 -7
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),d=require("@vft/utils"),p=require("../icon/index.cjs"),b=require("../divider/index.cjs"),A=require("../tooltip/index.cjs");require("@vueuse/core");const M=require("../../utils/error.cjs");require("../config-provider/hooks/use-global-config.cjs");require("lodash-es");require("../form/index.cjs");const m=require("../../hooks/use-namespace/index.cjs");require("../../hooks/use-model-toggle/index.cjs");require("@popperjs/core");require("../../hooks/use-z-index/index.cjs");require("vue-router");const $=require("./use-menu.cjs"),U=["title"],h=e.defineComponent({name:"vft-menu-item",inheritAttrs:!1}),E=e.defineComponent({...h,props:{index:{},route:{},disabled:{type:Boolean},icon:{},title:{},isAloneUse:{type:Boolean},divider:{type:Boolean},className:{},reverse:{type:Boolean}},emits:["click","mouseenter","mouseleave"],setup(n,{emit:q}){const s=m.useNamespace("menu-item"),u=q,f=e.getCurrentInstance(),y=e.useAttrs(),C=m.useNamespace("menu"),a=m.useNamespace("menu-item"),o=n.isAloneUse?null:e.inject("rootMenu");!o&&!n.isAloneUse&&M.throwError(s.b(),"can not inject root menu");const{parentMenu:v,indexPath:k}=$.default(f,e.computed(()=>n.index)),c=n.isAloneUse?null:e.inject(`subMenu:${v.value.uid}`);!c&&!n.isAloneUse&&M.throwError(s.b(),"can not inject sub menu");const B=e.computed(()=>n.index===o?.activeIndex),r=e.reactive({index:n.index,indexPath:k,active:B}),N=()=>{n.disabled||(o?.handleMenuItemClick({...y,index:n.index,indexPath:k.value,route:n.route}),u("click",r))},i=e.computed(()=>d.singleAttrToObj(n.icon,"icon")),g=e.computed(()=>d.renderTNode(f,"title"));return e.onMounted(()=>{n.isAloneUse||(c?.addSubMenu(r),o?.addMenuItem(r))}),e.onBeforeUnmount(()=>{n.isAloneUse||(c?.removeSubMenu(r),o?.removeMenuItem(r))}),(t,l)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.reverse&&t.divider?(e.openBlock(),e.createBlock(e.unref(b.VftDivider),{key:0,"margin-y":"0"})):e.createCommentVNode("",!0),e.createElementVNode("li",{class:e.normalizeClass([t.className,e.unref(a).b(),e.unref(a).is("active",t.isAloneUse?!1:B.value),e.unref(a).is("disabled",t.disabled)]),onMouseenter:l[0]||(l[0]=V=>u("mouseenter")),onMouseleave:l[1]||(l[1]=V=>u("mouseleave")),role:"menuitem",tabindex:"-1",onClick:N},[e.unref(v)?.type?.name==="vft-menu"&&e.unref(o)?.props.collapse&&t.$slots.title?(e.openBlock(),e.createBlock(e.unref(A.VftTooltip),{key:0,placement:"right","fallback-placements":["left"],persistent:e.unref(o).props.persistent},{content:e.withCtx(()=>[e.renderSlot(t.$slots,"title")]),default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass(e.unref(C).be("tooltip","trigger"))},[i.value?.icon?(e.openBlock(),e.createBlock(e.unref(p.VftIcon),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):e.createCommentVNode("",!0),e.renderSlot(t.$slots,"default")],2)]),_:3},8,["persistent"])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[t.$slots?.default?e.renderSlot(t.$slots,"default",{key:0}):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[i.value?.icon?(e.openBlock(),e.createBlock(e.unref(p.VftIcon),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):e.createCommentVNode("",!0),e.createElementVNode("span",{class:e.normalizeClass(e.unref(s).e("text")),title:t.title},[e.createVNode(e.unref(d.VNode),{content:g.value},null,8,["content"])],10,U)],64))],64))],34),!t.reverse&&t.divider?(e.openBlock(),e.createBlock(e.unref(b.VftDivider),{key:1,"margin-y":"0"})):e.createCommentVNode("",!0)],64))}});exports.default=E;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),d=require("@vft/utils"),p=require("../icon/index.cjs"),b=require("../divider/index.cjs"),A=require("../tooltip/index.cjs");require("@vueuse/core");const M=require("../../utils/error.cjs");require("../config-provider/hooks/use-global-config.cjs");require("lodash-es");require("../form/index.cjs");const m=require("../../hooks/use-namespace/index.cjs");require("../../hooks/use-model-toggle/index.cjs");require("@popperjs/core");require("../../hooks/use-z-index/index.cjs");const $=require("./use-menu.cjs"),U=["title"],h=e.defineComponent({name:"vft-menu-item",inheritAttrs:!1}),E=e.defineComponent({...h,props:{index:{},route:{},disabled:{type:Boolean},icon:{},title:{},isAloneUse:{type:Boolean},divider:{type:Boolean},className:{},reverse:{type:Boolean}},emits:["click","mouseenter","mouseleave"],setup(n,{emit:y}){const s=y,u=m.useNamespace("menu-item"),f=e.getCurrentInstance(),q=e.useAttrs(),C=m.useNamespace("menu"),a=m.useNamespace("menu-item"),o=n.isAloneUse?null:e.inject("rootMenu");!o&&!n.isAloneUse&&M.throwError(u.b(),"can not inject root menu");const{parentMenu:v,indexPath:k}=$.default(f,e.computed(()=>n.index)),c=n.isAloneUse?null:e.inject(`subMenu:${v.value.uid}`);!c&&!n.isAloneUse&&M.throwError(u.b(),"can not inject sub menu");const B=e.computed(()=>n.index===o?.activeIndex),r=e.reactive({index:n.index,indexPath:k,active:B}),N=()=>{n.disabled||(o?.handleMenuItemClick({...q,index:n.index,indexPath:k.value,route:n.route}),s("click",r))},i=e.computed(()=>d.singleAttrToObj(n.icon,"icon")),g=e.computed(()=>d.renderTNode(f,"title"));return e.onMounted(()=>{n.isAloneUse||(c?.addSubMenu(r),o?.addMenuItem(r))}),e.onBeforeUnmount(()=>{n.isAloneUse||(c?.removeSubMenu(r),o?.removeMenuItem(r))}),(t,l)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.reverse&&t.divider?(e.openBlock(),e.createBlock(e.unref(b.VftDivider),{key:0,"margin-y":"0"})):e.createCommentVNode("",!0),e.createElementVNode("li",{class:e.normalizeClass([t.className,e.unref(a).b(),e.unref(a).is("active",t.isAloneUse?!1:B.value),e.unref(a).is("disabled",t.disabled)]),onMouseenter:l[0]||(l[0]=V=>s("mouseenter")),onMouseleave:l[1]||(l[1]=V=>s("mouseleave")),role:"menuitem",tabindex:"-1",onClick:N},[e.unref(v)?.type?.name==="vft-menu"&&e.unref(o)?.props.collapse&&t.$slots.title?(e.openBlock(),e.createBlock(e.unref(A.VftTooltip),{key:0,placement:"right","fallback-placements":["left"],persistent:e.unref(o).props.persistent},{content:e.withCtx(()=>[e.renderSlot(t.$slots,"title")]),default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass(e.unref(C).be("tooltip","trigger"))},[i.value?.icon?(e.openBlock(),e.createBlock(e.unref(p.VftIcon),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):e.createCommentVNode("",!0),e.renderSlot(t.$slots,"default")],2)]),_:3},8,["persistent"])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[t.$slots?.default?e.renderSlot(t.$slots,"default",{key:0}):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[i.value?.icon?(e.openBlock(),e.createBlock(e.unref(p.VftIcon),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):e.createCommentVNode("",!0),e.createElementVNode("span",{class:e.normalizeClass(e.unref(u).e("text")),title:t.title},[e.createVNode(e.unref(d.VNode),{content:g.value},null,8,["content"])],10,U)],64))],64))],34),!t.reverse&&t.divider?(e.openBlock(),e.createBlock(e.unref(b.VftDivider),{key:1,"margin-y":"0"})):e.createCommentVNode("",!0)],64))}});exports.default=E;
@@ -1,5 +1,5 @@
1
1
  import type { NavigationFailure } from 'vue-router';
2
- import { type SubMenuProps } from './sub-menu.vue';
2
+ import type { SubMenuProps } from './sub-menu.vue';
3
3
  import type { MenuItemClicked } from './types';
4
4
  export interface MenuProps {
5
5
  /** 菜单展示模式 */
@@ -22,6 +22,8 @@ export interface MenuProps {
22
22
  ellipsis?: boolean;
23
23
  horizontalMenuProps?: Partial<SubMenuProps>;
24
24
  persistent?: boolean;
25
+ /** 禁用子菜单的展开收缩行为 */
26
+ disableSubMenuAction?: boolean;
25
27
  }
26
28
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<MenuProps>>, {
27
29
  open: (index: string) => void;
@@ -29,6 +31,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
29
31
  handleResize: () => void;
30
32
  menu: import("vue").Ref<HTMLUListElement | undefined, HTMLUListElement | undefined>;
31
33
  inSubMenu: import("vue").Ref<boolean, boolean>;
34
+ updateActiveIndex: (val: string) => void;
35
+ activeIndex: import("vue").Ref<string | undefined, string | undefined>;
32
36
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
33
37
  "update:collapse": (val: boolean) => void;
34
38
  "sub-menu-click": (val: any) => void;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),q=require("@vft/utils"),H=require("../icon/index.cjs"),J=require("@vueuse/core");require("../config-provider/hooks/use-global-config.cjs");require("lodash-es");const K=require("../../utils/vue/vnode.cjs");require("../form/index.cjs");const P=require("../../hooks/use-namespace/index.cjs");require("../../hooks/use-model-toggle/index.cjs");require("@popperjs/core");require("../../hooks/use-z-index/index.cjs");const Q=require("./menu-collapse-transition.vue.cjs"),X=require("./sub-menu.vue2.cjs"),Y=require("./use-menu-css-var.cjs"),Z=require("./utils/menu-bar.cjs"),_=n.defineComponent({name:"vft-menu"}),ee=n.defineComponent({..._,props:{mode:{default:"vertical"},defaultActive:{default:""},defaultOpeneds:{default:()=>[]},uniqueOpened:{type:Boolean},router:{type:Boolean},menuTrigger:{default:"hover"},collapse:{type:Boolean},collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},horizontalMenuProps:{},persistent:{type:Boolean,default:!0}},emits:["update:collapse","sub-menu-click","select","close","open"],setup(u,{expose:k,emit:w}){const m=w,p=P.useNamespace("menu"),B=n.useSlots(),h=n.getCurrentInstance(),x=h.appContext.config.globalProperties.$router,i=n.ref(),y=P.useNamespace("sub-menu"),f=n.ref(-1),s=n.ref(u.defaultOpeneds&&!u.collapse?u.defaultOpeneds.slice(0):[]),a=n.ref(u.defaultActive),r=n.ref({}),M=n.ref({}),R=n.computed(()=>u.mode==="horizontal"||u.mode==="vertical"&&u.collapse),A=()=>{const e=a.value&&r.value[a.value];if(!e||u.mode==="horizontal"||u.collapse)return;e.indexPath.forEach(l=>{const o=M.value[l];o&&b(l,o.indexPath)})},b=(e,t,l)=>{s.value.includes(e)||(u.uniqueOpened&&(s.value=s.value.filter(o=>t.includes(o))),s.value.push(e),m("open",{index:e,indexPath:t,e:l}))},S=(e,t,l)=>{const o=s.value.indexOf(e);o!==-1&&s.value.splice(o,1),m("close",{index:e,indexPath:t,e:l})},E=({e,index:t,indexPath:l,isFirstLevel:o=!1})=>{o||(s.value.includes(t)?S(t,l,e):b(t,l,e)),m("sub-menu-click",{e,index:t,indexPath:l})},W=e=>{(u.mode==="horizontal"||u.collapse)&&(s.value=[]);const{index:t,indexPath:l}=e;if(!(q.isNullOrUndefined(t)||q.isNullOrUndefined(l))){if(u.router&&x){const o=e.route||t,c=x.push(o).then(d=>(d||(a.value=t),d));m("select",e,c)}else a.value=t,m("select",e);q.isMobile()&&setTimeout(()=>{s.value=[]},100)}},V=e=>{const t=r.value,l=t[e]||a.value&&t[a.value]||t[u.defaultActive];l?a.value=l.index:a.value=e},$=()=>{if(!i.value)return-1;const e=Array.from(i.value?.childNodes??[]).filter(g=>g.nodeName!=="#text"||g.nodeValue),t=64,l=Number.parseInt(getComputedStyle(i.value).paddingLeft,10),o=Number.parseInt(getComputedStyle(i.value).paddingRight,10),c=i.value.clientWidth-l-o;let d=0,v=0;return e.forEach((g,G)=>{d+=g.offsetWidth||0,d<=c-t&&(v=G+1)}),v===e.length?-1:v},D=(e,t=33.34)=>{let l;return()=>{l&&clearTimeout(l),l=setTimeout(()=>{e()},t)}};let C=!0;const I=()=>{const e=()=>{f.value=-1,n.nextTick(()=>{f.value=$()})};C?e():D(e)(),C=!1};n.watch(()=>u.defaultActive,e=>{r.value[e]||(a.value=""),V(e)}),n.watch(()=>u.collapse,e=>{e&&(s.value=[])}),n.watch(r.value,A);let O;n.watchEffect(()=>{u.mode==="horizontal"&&u.ellipsis?O=J.useResizeObserver(i,I).stop:O?.()});const T=e=>{M.value[e.index]=e},z=e=>{delete M.value[e.index]},L=e=>{r.value[e.index]=e},U=e=>{delete r.value[e.index]},N=n.ref(!1),j=n.ref(),F=n.ref();return n.provide("rootMenu",n.reactive({props:h.props,openedMenus:s,items:r,subMenus:M,activeIndex:a,isMenuPopup:R,inSubMenu:N,inSubMenuMouseEnterTimer:j,inSubMenuMouseleaveTimer:F,addMenuItem:L,removeMenuItem:U,addSubMenu:T,removeSubMenu:z,openMenu:b,closeMenu:S,handleMenuItemClick:W,handleSubMenuClick:E})),n.provide(`subMenu:${h.uid}`,{addSubMenu:T,removeSubMenu:z,mouseInChild:n.ref(!1),level:0}),n.onMounted(()=>{u.mode==="horizontal"&&new Z.default(h.vnode.el,p.namespace.value)}),k({open:e=>{const{indexPath:t}=M.value[e];t.forEach(l=>b(l,t))},close:S,handleResize:I,menu:i,inSubMenu:N}),()=>{let e=B.default?.()??[];const t=[];if(u.mode==="horizontal"&&i.value){const c=K.flattedChildren(e),d=f.value===-1?c:c.slice(0,f.value),v=f.value===-1?[]:c.slice(f.value);v?.length&&u.ellipsis&&(e=d,t.push(n.h(X.default,{index:"sub-menu-more",class:y.e("hide-arrow"),...u.horizontalMenuProps},{title:()=>n.h(H.VftIcon,{icon:"icon-menu-line",class:y.e("icon-more")}),default:()=>v})))}const l=Y.useMenuCssVar(h.props,0),o=n.h("ul",{key:String(u.collapse),role:"menubar",ref:i,style:l.value,class:{[p.b()]:!0,[p.m(u.mode)]:!0,[p.m("collapse")]:u.collapse}},[...e,...t]);return u.collapseTransition&&u.mode==="vertical"?n.h(Q.default,()=>o):o}}});exports.default=ee;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("vue"),q=require("@vft/utils"),H=require("../icon/index.cjs"),J=require("@vueuse/core");require("../config-provider/hooks/use-global-config.cjs");require("lodash-es");const K=require("../../utils/vue/vnode.cjs");require("../form/index.cjs");const P=require("../../hooks/use-namespace/index.cjs");require("../../hooks/use-model-toggle/index.cjs");require("@popperjs/core");require("../../hooks/use-z-index/index.cjs");const Q=require("./menu-collapse-transition.vue.cjs"),X=require("./sub-menu.vue2.cjs"),Y=require("./use-menu-css-var.cjs"),Z=require("./utils/menu-bar.cjs"),_=u.defineComponent({name:"vft-menu"}),ee=u.defineComponent({..._,props:{mode:{default:"vertical"},defaultActive:{default:""},defaultOpeneds:{default:()=>[]},uniqueOpened:{type:Boolean},router:{type:Boolean},menuTrigger:{default:"hover"},collapse:{type:Boolean},collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},horizontalMenuProps:{},persistent:{type:Boolean,default:!0},disableSubMenuAction:{type:Boolean,default:!1}},emits:["update:collapse","sub-menu-click","select","close","open"],setup(n,{expose:k,emit:w}){const m=w,b=P.useNamespace("menu"),A=u.useSlots(),h=u.getCurrentInstance(),y=h.appContext.config.globalProperties.$router,i=u.ref(),x=P.useNamespace("sub-menu"),f=u.ref(-1),a=u.ref(n.defaultOpeneds&&!n.collapse?n.defaultOpeneds.slice(0):[]),s=u.ref(n.defaultActive),r=u.ref({}),M=u.ref({}),R=u.computed(()=>n.mode==="horizontal"||n.mode==="vertical"&&n.collapse),E=()=>{const e=s.value&&r.value[s.value];if(!e||n.mode==="horizontal"||n.collapse)return;e.indexPath.forEach(l=>{const o=M.value[l];o&&p(l,o.indexPath)})},p=(e,t,l)=>{a.value.includes(e)||(n.uniqueOpened&&(a.value=a.value.filter(o=>t.includes(o))),a.value.push(e),m("open",{index:e,indexPath:t,e:l}))},g=(e,t,l)=>{const o=a.value.indexOf(e);o!==-1&&a.value.splice(o,1),m("close",{index:e,indexPath:t,event:l})},W=({e,index:t,indexPath:l,isFirstLevel:o=!1})=>{if(!o){const c=a.value.includes(t);s.value=t,n.disableSubMenuAction||(c?g(t,l,e):p(t,l,e))}m("sub-menu-click",{e,index:t,indexPath:l})},V=e=>{(n.mode==="horizontal"||n.collapse)&&(a.value=[]);const{index:t,indexPath:l}=e;if(!(q.isNullOrUndefined(t)||q.isNullOrUndefined(l))){if(n.router&&y){const o=e.route||t,c=y.push(o).then(d=>(d||(s.value=t),d));m("select",e,c)}else s.value=t,m("select",e);q.isMobile()&&setTimeout(()=>{a.value=[]},100)}},C=e=>{const t=r.value,l=t[e]||s.value&&t[s.value]||t[n.defaultActive];l?s.value=l.index:s.value=e},$=()=>{if(!i.value)return-1;const e=Array.from(i.value?.childNodes??[]).filter(S=>S.nodeName!=="#text"||S.nodeValue),t=64,l=Number.parseInt(getComputedStyle(i.value).paddingLeft,10),o=Number.parseInt(getComputedStyle(i.value).paddingRight,10),c=i.value.clientWidth-l-o;let d=0,v=0;return e.forEach((S,G)=>{d+=S.offsetWidth||0,d<=c-t&&(v=G+1)}),v===e.length?-1:v},D=(e,t=33.34)=>{let l;return()=>{l&&clearTimeout(l),l=setTimeout(()=>{e()},t)}};let I=!0;const T=()=>{const e=()=>{f.value=-1,u.nextTick(()=>{f.value=$()})};I?e():D(e)(),I=!1};u.watch(()=>n.defaultActive,e=>{r.value[e]||(s.value=""),C(e)}),u.watch(()=>n.collapse,e=>{e&&(a.value=[])}),u.watch(r.value,E);let z;u.watchEffect(()=>{n.mode==="horizontal"&&n.ellipsis?z=J.useResizeObserver(i,T).stop:z?.()});const O=e=>{M.value[e.index]=e},B=e=>{delete M.value[e.index]},L=e=>{r.value[e.index]=e},U=e=>{delete r.value[e.index]},N=u.ref(!1),j=u.ref(),F=u.ref();return u.provide("rootMenu",u.reactive({props:h.props,openedMenus:a,items:r,subMenus:M,activeIndex:s,isMenuPopup:R,inSubMenu:N,inSubMenuMouseEnterTimer:j,inSubMenuMouseleaveTimer:F,addMenuItem:L,removeMenuItem:U,addSubMenu:O,removeSubMenu:B,openMenu:p,closeMenu:g,handleMenuItemClick:V,handleSubMenuClick:W})),u.provide(`subMenu:${h.uid}`,{addSubMenu:O,removeSubMenu:B,mouseInChild:u.ref(!1),level:0}),u.onMounted(()=>{n.mode==="horizontal"&&new Z.default(h.vnode.el,b.namespace.value)}),k({open:e=>{const{indexPath:t}=M.value[e];t.forEach(l=>p(l,t))},close:g,handleResize:T,menu:i,inSubMenu:N,updateActiveIndex:C,activeIndex:s}),()=>{let e=A.default?.()??[];const t=[];if(n.mode==="horizontal"&&i.value){const c=K.flattedChildren(e),d=f.value===-1?c:c.slice(0,f.value),v=f.value===-1?[]:c.slice(f.value);v?.length&&n.ellipsis&&(e=d,t.push(u.h(X.default,{index:"sub-menu-more",class:x.e("hide-arrow"),...n.horizontalMenuProps},{title:()=>u.h(H.VftIcon,{icon:"icon-menu-line",class:x.e("icon-more")}),default:()=>v})))}const l=Y.useMenuCssVar(h.props,0),o=u.h("ul",{key:String(n.collapse),role:"menubar",ref:i,style:l.value,class:{[b.b()]:!0,[b.m(n.mode)]:!0,[b.m("collapse")]:n.collapse}},[...e,...t]);return n.collapseTransition&&n.mode==="vertical"?u.h(Q.default,()=>o):o}}});exports.default=ee;
@@ -1,6 +1,6 @@
1
- import { type ToolTipProps } from 'vft/es/components/tooltip';
2
- import { type IconProps } from 'vft/es/components/icon';
3
- import { type ClassType } from '../types';
1
+ import type { ToolTipProps } from 'vft/es/components/tooltip';
2
+ import type { IconProps } from 'vft/es/components/icon';
3
+ import type { ClassType } from '../types';
4
4
  export interface SubMenuProps {
5
5
  index: string;
6
6
  showTimeout?: number;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),m=require("@vft/utils"),ee=require("../tooltip/index.cjs"),V=require("../icon/index.cjs"),te=require("../collapse-transition/index.cjs"),N=require("@vueuse/core"),R=require("../../utils/error.cjs");require("../config-provider/hooks/use-global-config.cjs");require("lodash-es");require("../form/index.cjs");const x=require("../../hooks/use-namespace/index.cjs");require("../../hooks/use-model-toggle/index.cjs");require("@popperjs/core");require("../../hooks/use-z-index/index.cjs");const oe=require("./use-menu.cjs"),ne=require("./use-menu-css-var.cjs"),ue=e.defineComponent({name:"vft-sub-menu",inheritAttrs:!1}),le=e.defineComponent({...ue,props:{index:{},showTimeout:{default:300},hideTimeout:{default:300},popperClass:{},disabled:{type:Boolean},popperOffset:{default:6},expandIcon:{default:()=>({})},collapseIcon:{default:()=>({})},title:{},icon:{},showArrow:{type:Boolean,default:!0},toolTipCfg:{},teleported:{type:Boolean,default:void 0}},emits:["mouseenter","mouseleave"],setup(o,{expose:D,emit:L}){const S=x.useNamespace("sub-menu"),w=L,d=e.getCurrentInstance(),{indexPath:f,parentMenu:q}=oe.default(d,e.computed(()=>o.index)),a=x.useNamespace("menu"),l=x.useNamespace("sub-menu"),t=e.inject("rootMenu");t||R.throwError(S.b(),"can not inject root menu");const r=e.inject(`subMenu:${q.value.uid}`);r||R.throwError(S.b(),"can not inject sub menu");const C=e.ref({});let M;const y=e.ref(!1),H=e.ref(),I=e.ref(null),k=e.computed(()=>c.value==="horizontal"&&b.value?"bottom-start":"right-start"),b=e.computed(()=>r.level===0),g=e.computed(()=>o.teleported===void 0?b.value:o.teleported),U=e.computed(()=>t.props.collapse?`${a.namespace.value}-zoom-in-left`:`${a.namespace.value}-zoom-in-top`),Z=e.computed(()=>c.value==="horizontal"&&b.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","left-start","bottom-start","bottom-end","top-start","top-end"]),i=e.computed(()=>t.openedMenus.includes(o.index)),p=e.computed(()=>{let n=!1;return Object.values(C.value).forEach(s=>{s.active&&(n=!0)}),o.index===t.activeIndex&&(n=!0),n}),z=e.computed(()=>t.props.backgroundColor||""),E=e.computed(()=>t.props.activeTextColor||""),A=e.computed(()=>t.props.textColor||""),c=e.computed(()=>t.props.mode),G=e.computed(()=>t.props.persistent),h=e.reactive({index:o.index,indexPath:f,active:p}),j=ne.useMenuCssVar(t.props,r.level+1),P=e.computed(()=>c.value!=="horizontal"?{color:A.value}:{borderBottomColor:p.value?t.props.activeTextColor?E.value:"":"transparent",color:p.value?E.value:A.value}),J=()=>I.value?.popperRef?.popperInstanceRef?.destroy(),K=n=>{n||J()},$=n=>{const s={e:n,index:o.index,indexPath:f.value,active:p.value};if(t.props.menuTrigger==="hover"&&t.props.mode==="horizontal"&&!m.isMobile()||t.props.collapse&&t.props.mode==="vertical"||o.disabled){t.handleSubMenuClick({...s,isFirstLevel:!0});return}t.handleSubMenuClick(s)},v=(n,s=o.showTimeout)=>{n.type!=="focus"&&(t.props.menuTrigger==="click"&&t.props.mode==="horizontal"||!t.props.collapse&&t.props.mode==="vertical"||o.disabled||(r.mouseInChild.value=!0,M?.(),{stop:M}=N.useTimeoutFn(()=>{t.openMenu(o.index,f.value)},s),g.value&&q.value.vnode.el?.dispatchEvent(new MouseEvent("mouseenter")),w("mouseenter",n)))},Q=()=>{t.inSubMenuMouseEnterTimer&&clearTimeout(t.inSubMenuMouseEnterTimer),t.inSubMenuMouseleaveTimer&&clearTimeout(t.inSubMenuMouseleaveTimer),t.inSubMenuMouseEnterTimer=setTimeout(()=>{t.inSubMenu=!0},o.showTimeout+10)},W=()=>{t.inSubMenuMouseEnterTimer&&clearTimeout(t.inSubMenuMouseEnterTimer),t.inSubMenuMouseleaveTimer&&clearTimeout(t.inSubMenuMouseleaveTimer),t.inSubMenuMouseleaveTimer=setTimeout(()=>{t.inSubMenu=!1},o.hideTimeout-10)},T=(n,s=!1)=>{t.props.menuTrigger==="click"&&t.props.mode==="horizontal"||!t.props.collapse&&t.props.mode==="vertical"||(M?.(),r.mouseInChild.value=!1,{stop:M}=N.useTimeoutFn(()=>{!y.value&&t.closeMenu(o.index,f.value)},o.hideTimeout),g.value&&s&&d.parent?.type.name==="vft-sub-menu"&&r.handleMouseleave?.(n,!0),w("mouseleave",n))};e.watch(()=>t.props.collapse,n=>K(!!n));{const n=u=>{C.value[u.index]=u},s=u=>{delete C.value[u.index]};e.provide(`subMenu:${d.uid}`,{addSubMenu:n,removeSubMenu:s,handleMouseleave:T,mouseInChild:y,level:r.level+1})}D({opened:i}),e.onMounted(()=>{t.addSubMenu(h),r.addSubMenu(h)}),e.onBeforeUnmount(()=>{r.removeSubMenu(h),t.removeSubMenu(h)});const B=e.useSlots(),F=e.computed(()=>m.singleAttrToObj(o.icon,"icon")),X=e.computed(()=>m.singleAttrToObj(o.expandIcon,"icon")),Y=e.computed(()=>m.singleAttrToObj(o.collapseIcon,"icon")),_=e.computed(()=>c.value==="horizontal"&&b.value||c.value==="vertical"&&!t.props.collapse?{icon:"icon-arrow-down",size:20,...X.value}:{icon:"icon-arrow-right",size:18,...Y.value}),O=e.computed(()=>m.renderTNode(d,"title"));return()=>{const n=[F.value?.icon?e.h(V.VftIcon,{...F.value}):null,e.h("span",{class:[l.e("text"),l.is("arrow",o.showArrow)],title:d.props.title},O.value),o.showArrow?e.h(V.VftIcon,{class:l.e("icon-arrow"),..._.value,style:{transform:i.value?"rotateZ(180deg)":"none"}}):!1],s=t.isMenuPopup?e.h(ee.VftTooltip,{ref:I,visible:i.value,effect:"light",pure:!0,offset:o.popperOffset,showArrow:!1,persistent:G.value,popperClass:o.popperClass,placement:k.value,teleported:g.value,fallbackPlacements:Z.value,transition:U.value,gpuAcceleration:!1,...o.toolTipCfg},{content:()=>e.h("div",{class:[a.m(c.value),a.m("popup-container"),o.popperClass],onMouseenter:u=>v(u,100),onMouseleave:u=>T(u,!0),onFocus:u=>v(u,100)},[e.h("ul",{class:[a.b(),a.m("popup"),a.m(`popup-${k.value}`)],style:j.value},[B.default?.()])]),default:()=>e.h("div",{class:l.e("title"),style:[P.value,{backgroundColor:z.value}],onMouseenter:u=>v(u),onMouseleave:u=>T(u,!0),onClick:u=>$(u)},n)}):e.h(e.Fragment,{},[O.value?e.h("div",{class:l.e("title"),style:[P.value,{backgroundColor:z.value}],ref:H,onClick:$},n):null,e.h(te.VftCollapseTransition,{},{default:()=>e.withDirectives(e.h("ul",{role:"menu",class:[a.b(),a.m("inline")],style:j.value},[B.default?.()]),[[e.vShow,i.value]])})]);return e.h("li",{class:[l.b(),l.is("active",p.value),l.e(String(r.level)),l.is("in-popup",r.level!==0),l.is("opened",i.value),l.is("arrow",!0),l.is("disabled",o.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:i.value,onMouseenter:[Q,u=>v(u)],onMouseleave:[W,u=>T(u,!0)],onFocus:v},[s])}}});exports.default=le;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),m=require("@vft/utils"),ee=require("../tooltip/index.cjs"),V=require("../icon/index.cjs"),te=require("../collapse-transition/index.cjs"),N=require("@vueuse/core"),R=require("../../utils/error.cjs");require("../config-provider/hooks/use-global-config.cjs");require("lodash-es");require("../form/index.cjs");const x=require("../../hooks/use-namespace/index.cjs");require("../../hooks/use-model-toggle/index.cjs");require("@popperjs/core");require("../../hooks/use-z-index/index.cjs");const oe=require("./use-menu.cjs"),ne=require("./use-menu-css-var.cjs"),ue=e.defineComponent({name:"vft-sub-menu",inheritAttrs:!1}),le=e.defineComponent({...ue,props:{index:{},showTimeout:{default:300},hideTimeout:{default:300},popperClass:{},disabled:{type:Boolean},popperOffset:{default:6},expandIcon:{},collapseIcon:{},title:{},icon:{},showArrow:{type:Boolean,default:!0},toolTipCfg:{},teleported:{type:Boolean,default:void 0}},emits:["mouseenter","mouseleave"],setup(o,{expose:D,emit:L}){const S=L,w=x.useNamespace("sub-menu"),d=e.getCurrentInstance(),{indexPath:f,parentMenu:q}=oe.default(d,e.computed(()=>o.index)),a=x.useNamespace("menu"),l=x.useNamespace("sub-menu"),t=e.inject("rootMenu");t||R.throwError(w.b(),"can not inject root menu");const r=e.inject(`subMenu:${q.value.uid}`);r||R.throwError(w.b(),"can not inject sub menu");const C=e.ref({});let M;const y=e.ref(!1),H=e.ref(),I=e.ref(null),k=e.computed(()=>c.value==="horizontal"&&b.value?"bottom-start":"right-start"),b=e.computed(()=>r.level===0),g=e.computed(()=>o.teleported===void 0?b.value:o.teleported),U=e.computed(()=>t.props.collapse?`${a.namespace.value}-zoom-in-left`:`${a.namespace.value}-zoom-in-top`),Z=e.computed(()=>c.value==="horizontal"&&b.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","left-start","bottom-start","bottom-end","top-start","top-end"]),i=e.computed(()=>t.openedMenus.includes(o.index)),p=e.computed(()=>{let n=!1;return Object.values(C.value).forEach(s=>{s.active&&(n=!0)}),o.index===t.activeIndex&&(n=!0),n}),z=e.computed(()=>t.props.backgroundColor||""),E=e.computed(()=>t.props.activeTextColor||""),A=e.computed(()=>t.props.textColor||""),c=e.computed(()=>t.props.mode),G=e.computed(()=>t.props.persistent),h=e.reactive({index:o.index,indexPath:f,active:p}),j=ne.useMenuCssVar(t.props,r.level+1),P=e.computed(()=>c.value!=="horizontal"?{color:A.value}:{borderBottomColor:p.value?t.props.activeTextColor?E.value:"":"transparent",color:p.value?E.value:A.value}),J=()=>I.value?.popperRef?.popperInstanceRef?.destroy(),K=n=>{n||J()},$=n=>{const s={e:n,index:o.index,indexPath:f.value,active:p.value};if(t.props.menuTrigger==="hover"&&t.props.mode==="horizontal"&&!m.isMobile()||t.props.collapse&&t.props.mode==="vertical"||o.disabled){t.handleSubMenuClick({...s,isFirstLevel:!0});return}t.handleSubMenuClick(s)},v=(n,s=o.showTimeout)=>{n.type!=="focus"&&(t.props.menuTrigger==="click"&&t.props.mode==="horizontal"||!t.props.collapse&&t.props.mode==="vertical"||o.disabled||(r.mouseInChild.value=!0,M?.(),{stop:M}=N.useTimeoutFn(()=>{t.openMenu(o.index,f.value)},s),g.value&&q.value.vnode.el?.dispatchEvent(new MouseEvent("mouseenter")),S("mouseenter",n)))},Q=()=>{t.inSubMenuMouseEnterTimer&&clearTimeout(t.inSubMenuMouseEnterTimer),t.inSubMenuMouseleaveTimer&&clearTimeout(t.inSubMenuMouseleaveTimer),t.inSubMenuMouseEnterTimer=setTimeout(()=>{t.inSubMenu=!0},o.showTimeout+10)},W=()=>{t.inSubMenuMouseEnterTimer&&clearTimeout(t.inSubMenuMouseEnterTimer),t.inSubMenuMouseleaveTimer&&clearTimeout(t.inSubMenuMouseleaveTimer),t.inSubMenuMouseleaveTimer=setTimeout(()=>{t.inSubMenu=!1},o.hideTimeout-10)},T=(n,s=!1)=>{t.props.menuTrigger==="click"&&t.props.mode==="horizontal"||!t.props.collapse&&t.props.mode==="vertical"||(M?.(),r.mouseInChild.value=!1,{stop:M}=N.useTimeoutFn(()=>{!y.value&&t.closeMenu(o.index,f.value)},o.hideTimeout),g.value&&s&&d.parent?.type.name==="vft-sub-menu"&&r.handleMouseleave?.(n,!0),S("mouseleave",n))};e.watch(()=>t.props.collapse,n=>K(!!n));{const n=u=>{C.value[u.index]=u},s=u=>{delete C.value[u.index]};e.provide(`subMenu:${d.uid}`,{addSubMenu:n,removeSubMenu:s,handleMouseleave:T,mouseInChild:y,level:r.level+1})}D({opened:i}),e.onMounted(()=>{t.addSubMenu(h),r.addSubMenu(h)}),e.onBeforeUnmount(()=>{r.removeSubMenu(h),t.removeSubMenu(h)});const B=e.useSlots(),F=e.computed(()=>m.singleAttrToObj(o.icon,"icon")),X=e.computed(()=>m.singleAttrToObj(o.expandIcon,"icon")),Y=e.computed(()=>m.singleAttrToObj(o.collapseIcon,"icon")),_=e.computed(()=>c.value==="horizontal"&&b.value||c.value==="vertical"&&!t.props.collapse?{icon:"icon-arrow-down",size:20,...X.value}:{icon:"icon-arrow-right",size:18,...Y.value}),O=e.computed(()=>m.renderTNode(d,"title"));return()=>{const n=[F.value?.icon?e.h(V.VftIcon,{...F.value}):null,e.h("span",{class:[l.e("text"),l.is("arrow",o.showArrow)],title:d.props.title},O.value),o.showArrow?e.h(V.VftIcon,{class:l.e("icon-arrow"),..._.value,style:{transform:i.value?"rotateZ(180deg)":"none"}}):!1],s=t.isMenuPopup?e.h(ee.VftTooltip,{ref:I,visible:i.value,effect:"light",pure:!0,offset:o.popperOffset,showArrow:!1,persistent:G.value,popperClass:o.popperClass,placement:k.value,teleported:g.value,fallbackPlacements:Z.value,transition:U.value,gpuAcceleration:!1,...o.toolTipCfg},{content:()=>e.h("div",{class:[a.m(c.value),a.m("popup-container"),o.popperClass],onMouseenter:u=>v(u,100),onMouseleave:u=>T(u,!0),onFocus:u=>v(u,100)},[e.h("ul",{class:[a.b(),a.m("popup"),a.m(`popup-${k.value}`)],style:j.value},[B.default?.()])]),default:()=>e.h("div",{class:l.e("title"),style:[P.value,{backgroundColor:z.value}],onMouseenter:u=>v(u),onMouseleave:u=>T(u,!0),onClick:u=>$(u)},n)}):e.h(e.Fragment,{},[O.value?e.h("div",{class:l.e("title"),style:[P.value,{backgroundColor:z.value}],ref:H,onClick:$},n):null,e.h(te.VftCollapseTransition,{},{default:()=>e.withDirectives(e.h("ul",{role:"menu",class:[a.b(),a.m("inline")],style:j.value},[B.default?.()]),[[e.vShow,i.value]])})]);return e.h("li",{class:[l.b(),l.is("active",p.value),l.e(String(r.level)),l.is("in-popup",r.level!==0),l.is("opened",i.value),l.is("arrow",!0),l.is("disabled",o.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:i.value,onMouseenter:[Q,u=>v(u)],onMouseleave:[W,u=>T(u,!0)],onFocus:v},[s])}}});exports.default=le;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("@vueuse/core");require("@vft/utils");require("../config-provider/hooks/use-global-config.cjs");require("vue");const r=require("../../utils/vue/install.cjs");require("lodash-es");require("../form/index.cjs");const u=require("./side-menu.vue2.cjs");require("vue-router");const e=r.withInstall(u.default);exports.VftSideMenu=e;exports.default=e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("@vueuse/core");require("@vft/utils");require("../config-provider/hooks/use-global-config.cjs");require("vue");const r=require("../../utils/vue/install.cjs");require("lodash-es");require("../form/index.cjs");const u=require("./side-menu.vue2.cjs"),e=r.withInstall(u.default);exports.VftSideMenu=e;exports.default=e;
@@ -25,6 +25,10 @@ export declare const VftSideMenu: import("vft/es/utils").SFCWithInstall<import("
25
25
  type: import("vue").PropType<boolean>;
26
26
  default: boolean;
27
27
  };
28
+ disableSubMenuAction: {
29
+ type: import("vue").PropType<boolean>;
30
+ default: boolean;
31
+ };
28
32
  isFixedLeft: {
29
33
  type: import("vue").PropType<boolean>;
30
34
  default: boolean;
@@ -75,6 +79,10 @@ export declare const VftSideMenu: import("vft/es/utils").SFCWithInstall<import("
75
79
  type: import("vue").PropType<boolean>;
76
80
  default: boolean;
77
81
  };
82
+ defaultOpenedsLevel: {
83
+ type: import("vue").PropType<number | boolean>;
84
+ default: boolean;
85
+ };
78
86
  }>, {
79
87
  sideRef: import("vue").Ref<any, any>;
80
88
  jumpActiveDom: ({ activeDom, offset, delay }?: {
@@ -82,6 +90,7 @@ export declare const VftSideMenu: import("vft/es/utils").SFCWithInstall<import("
82
90
  offset?: number | undefined;
83
91
  delay?: number | undefined;
84
92
  }) => void;
93
+ menuRef: import("vue").Ref<any, any>;
85
94
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
86
95
  "update:collapse": (val: boolean) => void;
87
96
  "update:width": (val: string | number) => void;
@@ -92,6 +101,7 @@ export declare const VftSideMenu: import("vft/es/utils").SFCWithInstall<import("
92
101
  indexPath: string[];
93
102
  }) => void;
94
103
  subMenuClick: (val: any) => void;
104
+ subMenuOpenClick: (val: any) => void;
95
105
  menuItemMouseenter: (val: any) => void;
96
106
  menuItemMouseleave: (val: any) => void;
97
107
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@@ -121,6 +131,10 @@ export declare const VftSideMenu: import("vft/es/utils").SFCWithInstall<import("
121
131
  type: import("vue").PropType<boolean>;
122
132
  default: boolean;
123
133
  };
134
+ disableSubMenuAction: {
135
+ type: import("vue").PropType<boolean>;
136
+ default: boolean;
137
+ };
124
138
  isFixedLeft: {
125
139
  type: import("vue").PropType<boolean>;
126
140
  default: boolean;
@@ -171,6 +185,10 @@ export declare const VftSideMenu: import("vft/es/utils").SFCWithInstall<import("
171
185
  type: import("vue").PropType<boolean>;
172
186
  default: boolean;
173
187
  };
188
+ defaultOpenedsLevel: {
189
+ type: import("vue").PropType<number | boolean>;
190
+ default: boolean;
191
+ };
174
192
  }>> & Readonly<{
175
193
  onSelect?: ((val: {
176
194
  route: string;
@@ -181,6 +199,7 @@ export declare const VftSideMenu: import("vft/es/utils").SFCWithInstall<import("
181
199
  onDragEnd?: ((oldIndex: import("sortablejs").SortableEvent, newIndex: import("sortablejs").SortableEvent) => any) | undefined;
182
200
  onDragWidthEnd?: (() => any) | undefined;
183
201
  onSubMenuClick?: ((val: any) => any) | undefined;
202
+ onSubMenuOpenClick?: ((val: any) => any) | undefined;
184
203
  onMenuItemMouseenter?: ((val: any) => any) | undefined;
185
204
  onMenuItemMouseleave?: ((val: any) => any) | undefined;
186
205
  }>, {
@@ -188,6 +207,7 @@ export declare const VftSideMenu: import("vft/es/utils").SFCWithInstall<import("
188
207
  width: string | number;
189
208
  collapse: boolean;
190
209
  uniqueOpened: boolean;
210
+ disableSubMenuAction: boolean;
191
211
  isFixedLeft: boolean;
192
212
  collapseWidth: string | number;
193
213
  menuTopBottomHeight: number;
@@ -200,6 +220,7 @@ export declare const VftSideMenu: import("vft/es/utils").SFCWithInstall<import("
200
220
  autoScrollActiveDom: boolean | number;
201
221
  openMenuCollapse: boolean;
202
222
  disabledJudgeTurnOver: boolean;
223
+ defaultOpenedsLevel: number | boolean;
203
224
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>> & Record<string, any>;
204
225
  export default VftSideMenu;
205
226
  export * from './types';
@@ -44,6 +44,9 @@ export interface MenuConProps {
44
44
  defaultActive?: string;
45
45
  /** 默认展开 */
46
46
  defaultOpeneds?: Array<string | number>;
47
+ defaultOpenedsLevel?: number | boolean;
48
+ /** 禁用子菜单的展开收缩行为 */
49
+ disableSubMenuAction?: boolean;
47
50
  }
48
51
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<MenuConProps>, {
49
52
  isFixedLeft: boolean;
@@ -59,6 +62,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
59
62
  height: string;
60
63
  menuTopBottomHeight: number;
61
64
  useRouterJump: boolean;
65
+ disableSubMenuAction: boolean;
66
+ defaultOpenedsLevel: boolean;
62
67
  }>>, {
63
68
  sideRef: import("vue").Ref<any, any>;
64
69
  jumpActiveDom: ({ activeDom, offset, delay }?: {
@@ -66,6 +71,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
66
71
  offset?: number | undefined;
67
72
  delay?: number | undefined;
68
73
  }) => void;
74
+ menuRef: import("vue").Ref<any, any>;
69
75
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
70
76
  "update:collapse": (val: boolean) => void;
71
77
  "update:width": (val: string | number) => void;
@@ -76,6 +82,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
76
82
  indexPath: string[];
77
83
  }) => void;
78
84
  subMenuClick: (val: any) => void;
85
+ subMenuOpenClick: (val: any) => void;
79
86
  menuItemMouseenter: (val: any) => void;
80
87
  menuItemMouseleave: (val: any) => void;
81
88
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<MenuConProps>, {
@@ -92,6 +99,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
92
99
  height: string;
93
100
  menuTopBottomHeight: number;
94
101
  useRouterJump: boolean;
102
+ disableSubMenuAction: boolean;
103
+ defaultOpenedsLevel: boolean;
95
104
  }>>> & Readonly<{
96
105
  onSelect?: ((val: {
97
106
  route: string;
@@ -102,6 +111,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
102
111
  onDragEnd?: ((oldIndex: Sortable.SortableEvent, newIndex: Sortable.SortableEvent) => any) | undefined;
103
112
  onDragWidthEnd?: (() => any) | undefined;
104
113
  onSubMenuClick?: ((val: any) => any) | undefined;
114
+ onSubMenuOpenClick?: ((val: any) => any) | undefined;
105
115
  onMenuItemMouseenter?: ((val: any) => any) | undefined;
106
116
  onMenuItemMouseleave?: ((val: any) => any) | undefined;
107
117
  }>, {
@@ -109,6 +119,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
109
119
  width: string | number;
110
120
  collapse: boolean;
111
121
  uniqueOpened: boolean;
122
+ disableSubMenuAction: boolean;
112
123
  isFixedLeft: boolean;
113
124
  collapseWidth: string | number;
114
125
  menuTopBottomHeight: number;
@@ -121,6 +132,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
121
132
  autoScrollActiveDom: boolean | number;
122
133
  openMenuCollapse: boolean;
123
134
  disabledJudgeTurnOver: boolean;
135
+ defaultOpenedsLevel: number | boolean;
124
136
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
125
137
  export default _default;
126
138
  type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),R=require("@vft/router"),X=require("@vft/use/sortable"),h=require("@vft/utils");require("@vueuse/core");const k=require("../../utils/helper.cjs");require("lodash-es");require("../form/index.cjs");const ee=require("../icon/index.cjs"),g=require("../menu/index.cjs"),te=require("../../hooks/use-namespace/index.cjs");require("../../hooks/use-model-toggle/index.cjs");require("@popperjs/core");require("../../hooks/use-z-index/index.cjs");const ne=require("./use-drag-line.cjs");function oe(m){return typeof m=="function"||Object.prototype.toString.call(m)==="[object Object]"&&!n.isVNode(m)}const le=n.defineComponent({name:"vft-side-menu"}),ae=n.defineComponent({...le,props:{isFixedLeft:{type:Boolean,default:!0},menus:{},width:{default:200},height:{default:"100%"},collapseWidth:{default:50},attrMapping:{},menuTopBottomHeight:{default:0},showCollapse:{type:Boolean,default:!1},dragOption:{},dragWidthCfg:{type:[Boolean,Object],default:!1},useRouterJump:{type:Boolean,default:!1},openDisabled:{type:Boolean},autoScrollActiveDom:{type:[Boolean,Number],default:!0},openMenuCollapse:{type:Boolean,default:!0},collapse:{type:Boolean,default:!1},uniqueOpened:{type:Boolean,default:!0},disabledJudgeTurnOver:{type:Boolean,default:!1},defaultActive:{},defaultOpeneds:{}},emits:["update:collapse","update:width","dragEnd","dragWidthEnd","select","subMenuClick","menuItemMouseenter","menuItemMouseleave"],setup(m,{expose:A,emit:I}){const t=m,{defaultActive:W,collapse:f,uniqueOpened:j,defaultOpeneds:J,openMenuCollapse:E}=n.toRefs(t),c=I,s=te.useNamespace("side-menu"),i=n.useSlots(),M=n.getCurrentInstance(),S=n.ref(),u=n.computed(()=>({path:"path",children:"children",title:"title",index:"path",icon:"icon",disabled:"disabled",...t.attrMapping}));R.listenerRouteChange(({route:e})=>{!e||e.meta?.hideSide&&!t.useRouterJump||(S.value=e.path)});const L=e=>{const a=e.e;if(t.autoScrollActiveDom&&a){const o=h.isNumber(t.autoScrollActiveDom)?t.autoScrollActiveDom:0,l=a.target;C({activeDom:l,offset:o})}c("subMenuClick",e)},C=({activeDom:e=null,offset:a=0,delay:o=300}={})=>{v.value?.menu&&setTimeout(()=>{const l=e||document.querySelector(".vft-menu-item.is-active")||document.querySelector(".vft-sub-menu.is-active");l&&(v.value.menu.scrollTop=v.value.menu.scrollTop+(l.getBoundingClientRect().top-v.value.menu.getBoundingClientRect().top)+a)},o)},P=e=>{c("menuItemMouseenter",e)},U=e=>{c("menuItemMouseleave",e)},O=(e,a)=>{const o=e[u.value.path],l=e[u.value.title],r=e?.[u.value.children],p=e?.[u.value.index],N=e?.[u.value.icon],w=!!e?.[u.value.disabled],B=t.disabledJudgeTurnOver?!w:w,D=p||o||a+l;return r?.length?n.h(g.VftSubMenu,{...e,popperAppendToBody:!0,key:D,index:D,title:l,icon:N,disabled:t.openDisabled&&B,popperClass:s.e("popper")},{default:()=>r?.map((d,Y)=>{const y=d[u.value.path],T=d[u.value.index],G=d[u.value.icon],K=d[u.value.title],V=!!d[u.value.disabled],Q=t.disabledJudgeTurnOver?!V:V;return d?.[u.value.children]?.length?O(d,Y):n.h(g.VftMenuItem,{...d,key:T||y,index:T||y,route:y,icon:G,title:K,disabled:t.openDisabled&&Q},i.menuItem?()=>i.menuItem?.({item:d}):"")})}):n.h(g.VftMenuItem,{...e,key:p||o,index:p||o,title:l,route:o,icon:N,disabled:t.openDisabled&&B,onMouseenter:()=>P(e),onMouseleave:()=>U(e)},i.menuItem?()=>i.menuItem?.({item:e,index:a}):"")},v=n.ref(),$=n.computed(()=>({...t.collapseWidth===0&&f.value?{width:0}:{},height:`calc(100% - ${t.menuTopBottomHeight}px)`})),_=M.appContext.config.globalProperties.$router;async function H(e){if(t.useRouterJump){const{go:a}=R.useRouterHelper(_),o=e.route;let l=e.route;e.indexPath.some(p=>h.isUrl(p))&&(l=e.indexPath.slice(-2).join("/"));const r=_.getRoutes().filter(p=>p.path===l)?.[0]?.meta?.linkTarget;a(r?{url:o,winOpenOpt:{target:r}}:o)}c("select",e)}const b=n.ref(),x=n.ref(),q=n.ref(),F=n.computed(()=>({...t.collapseWidth===0&&f.value?{borderRight:"none"}:{},width:k.addUnit(t.width),height:t.height}));n.watch(()=>f.value,e=>{e?c("update:width",t.collapseWidth):c("update:width",q.value||t.width),q.value=t.width}),t.dragWidthCfg&&ne.useDragLine(b,x,M);const Z=n.computed(()=>({left:k.addUnit(t.width)})),z=n.computed(()=>[s.b(),t.isFixedLeft?s.m("fixed"):""]);return n.onMounted(()=>{n.nextTick(()=>{if(t.dragOption?.dragClassName){const e=document.querySelectorAll("."+s.e(t.dragOption?.dragClassName))?.[0],{initSortable:a}=X.useSortable(e,{draggable:".vft-menu-item",onEnd:o=>{const{oldIndex:l,newIndex:r}=o;h.isNullOrUndefined(l)||h.isNullOrUndefined(r)||l===r||c("dragEnd",l,r)},...t.dragOption});a()}})}),A({sideRef:b,jumpActiveDom:C}),()=>{let e;return n.createVNode("div",{ref:b,class:z.value,style:F.value},[i.top?n.createVNode("div",{class:s.e("top")},[i.top()]):null,n.h(n.createVNode(g.VftMenu,{ref:v,onSelect:H,onOpen:L,defaultActive:W?.value||S.value,defaultOpeneds:J?.value,class:[s.e("con"),t.dragOption?.dragClassName?s.e(t.dragOption?.dragClassName):""],style:$.value,collapse:E.value?f.value:!1,uniqueOpened:j.value,collapseTransition:!1},oe(e=t.menus.map((a,o)=>O(a,o)))?e:{default:()=>[e]})),i.bottom?n.createVNode("div",{class:s.e("bottom")},[i.bottom()]):t.showCollapse?n.createVNode("div",{onClick:()=>c("update:collapse",!f.value),class:[s.e("bottom"),s.e("collapse")]},[n.createVNode(ee.VftIcon,{style:{transform:f.value?"rotateY(180deg)":""},size:20,icon:"icon-sidebar-collapse"},null)]):null,i.default?.(),t.dragWidthCfg?n.createVNode("div",{ref:x,style:Z.value,class:s.e("drag-bar")},null):null])}}});exports.default=ae;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),R=require("@vft/router"),le=require("@vft/use/sortable"),g=require("@vft/utils");require("@vueuse/core");const I=require("../../utils/helper.cjs");require("lodash-es");require("../form/index.cjs");const oe=require("../icon/index.cjs"),b=require("../menu/index.cjs"),ue=require("../../hooks/use-namespace/index.cjs");require("../../hooks/use-model-toggle/index.cjs");require("@popperjs/core");require("../../hooks/use-z-index/index.cjs");const ae=require("./use-drag-line.cjs");function se(m){return typeof m=="function"||Object.prototype.toString.call(m)==="[object Object]"&&!n.isVNode(m)}const ie=n.defineComponent({name:"vft-side-menu"}),de=n.defineComponent({...ie,props:{isFixedLeft:{type:Boolean,default:!1},menus:{},width:{default:200},height:{default:"100%"},collapseWidth:{default:50},attrMapping:{},menuTopBottomHeight:{default:0},showCollapse:{type:Boolean,default:!1},dragOption:{},dragWidthCfg:{type:[Boolean,Object],default:!1},useRouterJump:{type:Boolean,default:!1},openDisabled:{type:Boolean},autoScrollActiveDom:{type:[Boolean,Number],default:!0},openMenuCollapse:{type:Boolean,default:!0},collapse:{type:Boolean,default:!1},uniqueOpened:{type:Boolean,default:!0},disabledJudgeTurnOver:{type:Boolean,default:!1},defaultActive:{},defaultOpeneds:{},defaultOpenedsLevel:{type:[Number,Boolean],default:!1},disableSubMenuAction:{type:Boolean,default:!1}},emits:["update:collapse","update:width","dragEnd","dragWidthEnd","select","subMenuClick","subMenuOpenClick","menuItemMouseenter","menuItemMouseleave"],setup(m,{expose:W,emit:j}){const t=m,r=j,{defaultActive:L,collapse:f,uniqueOpened:E,defaultOpeneds:J,openMenuCollapse:P,defaultOpenedsLevel:y}=n.toRefs(t),s=ue.useNamespace("side-menu"),c=n.useSlots(),O=n.getCurrentInstance(),C=n.ref(),a=n.computed(()=>({path:"path",children:"children",title:"title",index:"path",icon:"icon",disabled:"disabled",...t.attrMapping})),U=(e,u=1/0)=>{const l=[],o=(i,d=0)=>{d>=u||i.forEach(h=>{h[a.value.children]?.length&&(l.push(h[a.value.index]),o(h[a.value.children],d+1))})};return o(e),l};R.listenerRouteChange(({route:e})=>{!e||e.meta?.hideSide&&!t.useRouterJump||(C.value=e.path)});const $=e=>{const u=e.e;if(t.autoScrollActiveDom&&u){const l=g.isNumber(t.autoScrollActiveDom)?t.autoScrollActiveDom:0,o=u.target;x({activeDom:o,offset:l})}r("subMenuOpenClick",e)},H=e=>{r("subMenuClick",e)},x=({activeDom:e=null,offset:u=0,delay:l=300}={})=>{v.value?.menu&&setTimeout(()=>{const o=e||document.querySelector(".vft-menu-item.is-active")||document.querySelector(".vft-sub-menu.is-active");o&&(v.value.menu.scrollTop=v.value.menu.scrollTop+(o.getBoundingClientRect().top-v.value.menu.getBoundingClientRect().top)+u)},l)},F=e=>{r("menuItemMouseenter",e)},Z=e=>{r("menuItemMouseleave",e)},_=(e,u)=>{const l=e[a.value.path],o=e[a.value.title],i=e?.[a.value.children],d=e?.[a.value.index],h=e?.[a.value.icon],D=!!e?.[a.value.disabled],T=t.disabledJudgeTurnOver?!D:D,k=d||l||u+o;return i?.length?n.h(b.VftSubMenu,{...e,popperAppendToBody:!0,key:k,index:k,title:o,icon:h,disabled:t.openDisabled&&T,popperClass:s.e("popper")},{default:()=>i?.map((p,X)=>{const S=p[a.value.path],A=p[a.value.index],ee=p[a.value.icon],te=p[a.value.title],V=!!p[a.value.disabled],ne=t.disabledJudgeTurnOver?!V:V;return p?.[a.value.children]?.length?_(p,X):n.h(b.VftMenuItem,{...p,key:A||S,index:A||S,route:S,icon:ee,title:te,disabled:t.openDisabled&&ne},c.menuItem?()=>c.menuItem?.({item:p}):"")})}):n.h(b.VftMenuItem,{...e,key:d||l,index:d||l,title:o,route:l,icon:h,disabled:t.openDisabled&&T,onMouseenter:()=>F(e),onMouseleave:()=>Z(e)},c.menuItem?()=>c.menuItem?.({item:e,index:u}):"")},v=n.ref(),z=n.computed(()=>({...t.collapseWidth===0&&f.value?{width:0}:{},height:`calc(100% - ${t.menuTopBottomHeight}px)`})),q=O.appContext.config.globalProperties.$router;async function Y(e){if(t.useRouterJump){const{go:u}=R.useRouterHelper(q),l=e.route;let o=e.route;e.indexPath.some(d=>g.isUrl(d))&&(o=e.indexPath.slice(-2).join("/"));const i=q.getRoutes().filter(d=>d.path===o)?.[0]?.meta?.linkTarget;u(i?{url:l,winOpenOpt:{target:i}}:l)}r("select",e)}const M=n.ref(),N=n.ref(),B=n.ref(),G=n.computed(()=>({...t.collapseWidth===0&&f.value?{borderRight:"none"}:{},width:I.addUnit(t.width),height:t.height}));n.watch(()=>f.value,e=>{e?r("update:width",t.collapseWidth):r("update:width",B.value||t.width),B.value=t.width}),t.dragWidthCfg&&ae.useDragLine(M,N,O);const K=n.computed(()=>({left:I.addUnit(t.width)})),Q=n.computed(()=>[s.b(),t.isFixedLeft?s.m("fixed"):""]),w=n.ref([]);return n.onMounted(()=>{n.nextTick(()=>{if(t.dragOption?.dragClassName){const e=document.querySelectorAll(`.${s.e(t.dragOption?.dragClassName)}`)?.[0],{initSortable:u}=le.useSortable(e,{draggable:".vft-menu-item",onEnd:l=>{const{oldIndex:o,newIndex:i}=l;g.isNullOrUndefined(o)||g.isNullOrUndefined(i)||o===i||r("dragEnd",o,i)},...t.dragOption});u()}})}),W({sideRef:M,jumpActiveDom:x,menuRef:v}),()=>{let e;return y.value&&(w.value=U(t.menus,g.isNumber(y.value)?y.value:1/0)),n.createVNode("div",{ref:M,class:Q.value,style:G.value},[c.top?n.createVNode("div",{class:s.e("top")},[c.top()]):null,n.h(n.createVNode(b.VftMenu,{ref:v,onSelect:Y,onOpen:$,onSubMenuClick:H,defaultActive:L?.value||C.value,defaultOpeneds:J?.value||w.value,disableSubMenuAction:t.disableSubMenuAction,class:[s.e("con"),t.dragOption?.dragClassName?s.e(t.dragOption?.dragClassName):""],style:z.value,collapse:P.value?f.value:!1,uniqueOpened:E.value,collapseTransition:!1},se(e=t.menus.map((u,l)=>_(u,l)))?e:{default:()=>[e]})),c.bottom?n.createVNode("div",{class:s.e("bottom")},[c.bottom()]):t.showCollapse?n.createVNode("div",{onClick:()=>r("update:collapse",!f.value),class:[s.e("bottom"),s.e("collapse")]},[n.createVNode(oe.VftIcon,{style:{transform:f.value?"rotateY(180deg)":""},size:20,icon:"icon-sidebar-collapse"},null)]):null,c.default?.(),t.dragWidthCfg?n.createVNode("div",{ref:N,style:K.value,class:s.e("drag-bar")},null):null])}}});exports.default=de;
@@ -1 +1 @@
1
- "use strict";require("vue-router");
1
+ "use strict";
@@ -1,9 +1,9 @@
1
- import { type RouteLocationNormalized } from 'vue-router';
2
- export type MenuType = Pick<RouteLocationNormalized, 'path' | 'meta'> & {
1
+ export type MenuType = {
3
2
  children?: MenuType[];
4
3
  title: string;
5
4
  icon?: string;
6
- } & Record<string, any>;
5
+ [key: string]: any;
6
+ };
7
7
  export type MenuAttrMapping = {
8
8
  path?: string;
9
9
  children?: string;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="0.0.427";exports.version=e;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="0.0.429";exports.version=e;
@@ -1,6 +1,6 @@
1
1
  declare const _default: {
2
2
  "name": "vft",
3
- "version": "0.0.427",
3
+ "version": "0.0.429",
4
4
  "license": "MIT",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "es/index.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vft",
3
- "version": "0.0.427",
3
+ "version": "0.0.429",
4
4
  "license": "MIT",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "es/index.js",
@@ -55,12 +55,12 @@
55
55
  "resize-detector": "0.3.0",
56
56
  "sortablejs": "1.15.0",
57
57
  "photoswipe": "5.4.4",
58
- "@vft/constants": "0.0.74",
59
- "@vft/use": "0.0.87",
58
+ "@vft/utils": "0.0.144",
60
59
  "@vft/router": "0.0.67",
60
+ "@vft/use": "0.0.89",
61
61
  "@vft/store": "0.0.54",
62
62
  "@vft/directives": "0.0.36",
63
- "@vft/utils": "0.0.143"
63
+ "@vft/constants": "0.0.75"
64
64
  },
65
65
  "vetur": {
66
66
  "tags": "tags.json",