vft 0.0.13 → 0.0.15

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 (152) hide show
  1. package/es/component.mjs +8 -6
  2. package/es/component.mjs.map +1 -1
  3. package/es/components/back-top/back-top.vue2.mjs +8 -6
  4. package/es/components/back-top/back-top.vue2.mjs.map +1 -1
  5. package/es/components/context-menu/context-menu.vue.d.ts +39 -0
  6. package/es/components/context-menu/context-menu.vue.mjs +5 -0
  7. package/es/components/context-menu/context-menu.vue.mjs.map +1 -0
  8. package/es/components/context-menu/context-menu.vue2.mjs +93 -0
  9. package/es/components/context-menu/context-menu.vue2.mjs.map +1 -0
  10. package/es/components/context-menu/createContextMenu.d.ts +3 -0
  11. package/es/components/context-menu/createContextMenu.mjs +41 -0
  12. package/es/components/context-menu/createContextMenu.mjs.map +1 -0
  13. package/es/components/context-menu/index.d.ts +3 -0
  14. package/es/components/context-menu/index.mjs +8 -0
  15. package/es/components/context-menu/index.mjs.map +1 -0
  16. package/es/components/context-menu/style/css.d.ts +0 -0
  17. package/es/components/context-menu/style/css.mjs +3 -0
  18. package/es/components/context-menu/style/css.mjs.map +1 -0
  19. package/es/components/context-menu/style/index.d.ts +0 -0
  20. package/es/components/context-menu/style/index.mjs +3 -0
  21. package/es/components/context-menu/style/index.mjs.map +1 -0
  22. package/es/components/context-menu/types.d.ts +23 -0
  23. package/es/components/context-menu/types.mjs +2 -0
  24. package/es/components/context-menu/types.mjs.map +1 -0
  25. package/es/components/context-menu/useContextMenu.d.ts +3 -0
  26. package/es/components/context-menu/useContextMenu.mjs +11 -0
  27. package/es/components/context-menu/useContextMenu.mjs.map +1 -0
  28. package/es/components/index.d.ts +2 -0
  29. package/es/components/index.mjs +44 -32
  30. package/es/components/index.mjs.map +1 -1
  31. package/es/components/menu/menu-item.vue2.mjs +12 -10
  32. package/es/components/menu/menu-item.vue2.mjs.map +1 -1
  33. package/es/components/menu/sub-menu.vue2.mjs +5 -3
  34. package/es/components/menu/sub-menu.vue2.mjs.map +1 -1
  35. package/es/components/multiple-tabs/index.d.ts +30 -0
  36. package/es/components/multiple-tabs/index.mjs +16 -0
  37. package/es/components/multiple-tabs/index.mjs.map +1 -0
  38. package/es/components/multiple-tabs/multiple-tabs.vue.d.ts +29 -0
  39. package/es/components/multiple-tabs/multiple-tabs.vue.mjs +5 -0
  40. package/es/components/multiple-tabs/multiple-tabs.vue.mjs.map +1 -0
  41. package/es/components/multiple-tabs/multiple-tabs.vue2.mjs +152 -0
  42. package/es/components/multiple-tabs/multiple-tabs.vue2.mjs.map +1 -0
  43. package/es/components/multiple-tabs/style/css.d.ts +0 -0
  44. package/es/components/multiple-tabs/style/css.mjs +3 -0
  45. package/es/components/multiple-tabs/style/css.mjs.map +1 -0
  46. package/es/components/multiple-tabs/style/index.d.ts +0 -0
  47. package/es/components/multiple-tabs/style/index.mjs +3 -0
  48. package/es/components/multiple-tabs/style/index.mjs.map +1 -0
  49. package/es/components/multiple-tabs/tab-content.vue.d.ts +32 -0
  50. package/es/components/multiple-tabs/tab-content.vue.mjs +5 -0
  51. package/es/components/multiple-tabs/tab-content.vue.mjs.map +1 -0
  52. package/es/components/multiple-tabs/tab-content.vue2.mjs +49 -0
  53. package/es/components/multiple-tabs/tab-content.vue2.mjs.map +1 -0
  54. package/es/components/multiple-tabs/types.d.ts +3 -0
  55. package/es/components/multiple-tabs/types.mjs +2 -0
  56. package/es/components/multiple-tabs/types.mjs.map +1 -0
  57. package/es/components/multiple-tabs/use/index.d.ts +2 -0
  58. package/es/components/multiple-tabs/use/index.mjs +8 -0
  59. package/es/components/multiple-tabs/use/index.mjs.map +1 -0
  60. package/es/components/multiple-tabs/use/use-multiple-tabs.d.ts +9 -0
  61. package/es/components/multiple-tabs/use/use-multiple-tabs.mjs +54 -0
  62. package/es/components/multiple-tabs/use/use-multiple-tabs.mjs.map +1 -0
  63. package/es/components/multiple-tabs/use/use-tab-dropdown.d.ts +6 -0
  64. package/es/components/multiple-tabs/use/use-tab-dropdown.mjs +71 -0
  65. package/es/components/multiple-tabs/use/use-tab-dropdown.mjs.map +1 -0
  66. package/es/components/result/result.vue2.mjs +15 -13
  67. package/es/components/result/result.vue2.mjs.map +1 -1
  68. package/es/components/tabs/tab-nav.vue2.mjs +5 -3
  69. package/es/components/tabs/tab-nav.vue2.mjs.map +1 -1
  70. package/es/index.mjs +90 -78
  71. package/es/index.mjs.map +1 -1
  72. package/es/package.json.mjs +1 -1
  73. package/es/style.css +1 -1
  74. package/es/theme-style/src/multiple-tabs.scss.mjs +5 -0
  75. package/es/theme-style/src/multiple-tabs.scss.mjs.map +1 -0
  76. package/lib/component.js +1 -1
  77. package/lib/component.js.map +1 -1
  78. package/lib/components/back-top/back-top.vue2.js +1 -1
  79. package/lib/components/back-top/back-top.vue2.js.map +1 -1
  80. package/lib/components/context-menu/context-menu.vue.d.ts +39 -0
  81. package/lib/components/context-menu/context-menu.vue.js +2 -0
  82. package/lib/components/context-menu/context-menu.vue.js.map +1 -0
  83. package/lib/components/context-menu/context-menu.vue2.js +2 -0
  84. package/lib/components/context-menu/context-menu.vue2.js.map +1 -0
  85. package/lib/components/context-menu/createContextMenu.d.ts +3 -0
  86. package/lib/components/context-menu/createContextMenu.js +2 -0
  87. package/lib/components/context-menu/createContextMenu.js.map +1 -0
  88. package/lib/components/context-menu/index.d.ts +3 -0
  89. package/lib/components/context-menu/index.js +2 -0
  90. package/lib/components/context-menu/index.js.map +1 -0
  91. package/lib/components/context-menu/style/css.d.ts +0 -0
  92. package/lib/components/context-menu/style/css.js +2 -0
  93. package/lib/components/context-menu/style/css.js.map +1 -0
  94. package/lib/components/context-menu/style/index.d.ts +0 -0
  95. package/lib/components/context-menu/style/index.js +2 -0
  96. package/lib/components/context-menu/style/index.js.map +1 -0
  97. package/lib/components/context-menu/types.d.ts +23 -0
  98. package/lib/components/context-menu/types.js +2 -0
  99. package/lib/components/context-menu/types.js.map +1 -0
  100. package/lib/components/context-menu/useContextMenu.d.ts +3 -0
  101. package/lib/components/context-menu/useContextMenu.js +2 -0
  102. package/lib/components/context-menu/useContextMenu.js.map +1 -0
  103. package/lib/components/index.d.ts +2 -0
  104. package/lib/components/index.js +1 -1
  105. package/lib/components/menu/menu-item.vue2.js +1 -1
  106. package/lib/components/menu/menu-item.vue2.js.map +1 -1
  107. package/lib/components/menu/sub-menu.vue2.js +1 -1
  108. package/lib/components/menu/sub-menu.vue2.js.map +1 -1
  109. package/lib/components/multiple-tabs/index.d.ts +30 -0
  110. package/lib/components/multiple-tabs/index.js +2 -0
  111. package/lib/components/multiple-tabs/index.js.map +1 -0
  112. package/lib/components/multiple-tabs/multiple-tabs.vue.d.ts +29 -0
  113. package/lib/components/multiple-tabs/multiple-tabs.vue.js +2 -0
  114. package/lib/components/multiple-tabs/multiple-tabs.vue.js.map +1 -0
  115. package/lib/components/multiple-tabs/multiple-tabs.vue2.js +2 -0
  116. package/lib/components/multiple-tabs/multiple-tabs.vue2.js.map +1 -0
  117. package/lib/components/multiple-tabs/style/css.d.ts +0 -0
  118. package/lib/components/multiple-tabs/style/css.js +2 -0
  119. package/lib/components/multiple-tabs/style/css.js.map +1 -0
  120. package/lib/components/multiple-tabs/style/index.d.ts +0 -0
  121. package/lib/components/multiple-tabs/style/index.js +2 -0
  122. package/lib/components/multiple-tabs/style/index.js.map +1 -0
  123. package/lib/components/multiple-tabs/tab-content.vue.d.ts +32 -0
  124. package/lib/components/multiple-tabs/tab-content.vue.js +2 -0
  125. package/lib/components/multiple-tabs/tab-content.vue.js.map +1 -0
  126. package/lib/components/multiple-tabs/tab-content.vue2.js +2 -0
  127. package/lib/components/multiple-tabs/tab-content.vue2.js.map +1 -0
  128. package/lib/components/multiple-tabs/types.d.ts +3 -0
  129. package/lib/components/multiple-tabs/types.js +2 -0
  130. package/lib/components/multiple-tabs/types.js.map +1 -0
  131. package/lib/components/multiple-tabs/use/index.d.ts +2 -0
  132. package/lib/components/multiple-tabs/use/index.js +2 -0
  133. package/lib/components/multiple-tabs/use/index.js.map +1 -0
  134. package/lib/components/multiple-tabs/use/use-multiple-tabs.d.ts +9 -0
  135. package/lib/components/multiple-tabs/use/use-multiple-tabs.js +2 -0
  136. package/lib/components/multiple-tabs/use/use-multiple-tabs.js.map +1 -0
  137. package/lib/components/multiple-tabs/use/use-tab-dropdown.d.ts +6 -0
  138. package/lib/components/multiple-tabs/use/use-tab-dropdown.js +2 -0
  139. package/lib/components/multiple-tabs/use/use-tab-dropdown.js.map +1 -0
  140. package/lib/components/result/result.vue2.js +1 -1
  141. package/lib/components/result/result.vue2.js.map +1 -1
  142. package/lib/components/tabs/tab-nav.vue2.js +1 -1
  143. package/lib/components/tabs/tab-nav.vue2.js.map +1 -1
  144. package/lib/index.js +1 -1
  145. package/lib/index.js.map +1 -1
  146. package/lib/package.json.js +1 -1
  147. package/lib/theme-style/src/multiple-tabs.scss.js +2 -0
  148. package/lib/theme-style/src/multiple-tabs.scss.js.map +1 -0
  149. package/package.json +4 -2
  150. package/theme-style/src/context-menu.css +0 -0
  151. package/theme-style/src/multiple-tabs.scss +19 -0
  152. package/theme-style/vft-multiple-tabs.css +1 -0
@@ -11,6 +11,9 @@ import { VftCollapseTransition as se } from "../collapse-transition/index.mjs";
11
11
  import { VftTooltip as ie } from "../tooltip/index.mjs";
12
12
  import "../popover/index.mjs";
13
13
  import "./index.mjs";
14
+ import { singleAttrToObj as ce, renderTNode as pe } from "@vft/utils";
15
+ import "@vft/use";
16
+ import "../multiple-tabs/index.mjs";
14
17
  import { useNamespace as I } from "../../hooks/use-namespace/index.mjs";
15
18
  import "@popperjs/core";
16
19
  import "lodash";
@@ -18,7 +21,6 @@ import "../../hooks/use-z-index/index.mjs";
18
21
  import { useTimeoutFn as L } from "@vueuse/core";
19
22
  import "@vue/shared";
20
23
  import { throwError as U } from "../../utils/error.mjs";
21
- import { singleAttrToObj as ce, renderTNode as pe } from "@vft/utils";
22
24
  import de from "./use-menu.mjs";
23
25
  import { useMenuCssVar as ve } from "./use-menu-css-var.mjs";
24
26
  const S = (
@@ -26,7 +28,7 @@ const S = (
26
28
  I("sub-menu")
27
29
  ), me = Z({
28
30
  name: S.b()
29
- }), Ne = /* @__PURE__ */ Z({
31
+ }), De = /* @__PURE__ */ Z({
30
32
  ...me,
31
33
  props: {
32
34
  index: null,
@@ -227,6 +229,6 @@ const S = (
227
229
  }
228
230
  });
229
231
  export {
230
- Ne as default
232
+ De as default
231
233
  };
232
234
  //# sourceMappingURL=sub-menu.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sub-menu.vue2.mjs","sources":["../../../../../packages/components/menu/sub-menu.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst ns = /* hoist-static*/ useNamespace('sub-menu')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n name: ns.b()\n});</script>\n<script lang=\"tsx\" setup>\nimport { type IconProps, type Placement, type ToolTipProps, VftCollapseTransition as CollapseTransition, VftIcon as Icon, VftTooltip as Tooltip } from '@vft-ui/components';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { throwError } from '@vft-ui/utils';\nimport { renderTNode, singleAttrToObj } from '@vft/utils';\nimport { useTimeoutFn } from '@vueuse/core';\nimport type { CSSProperties, VNodeArrayChildren } from 'vue';\nimport { computed, Fragment, getCurrentInstance, h, inject, onBeforeUnmount, onMounted, provide, reactive, ref, useSlots, vShow, watch, withDirectives } from 'vue';\nimport type { MenuProvider, SubMenuProvider } from './types';\nimport useMenu from './use-menu';\nimport { useMenuCssVar } from './use-menu-css-var';\n\ninterface Props {\n /** 唯一标志 */\n index: string;\n /** 展开 sub-menu 的延时 */\n showTimeout?: number;\n /** 收起 sub-menu 的延时 */\n hideTimeout?: number;\n /** 为 popper 添加类名 */\n popperClass?: ClassType;\n /** 是否禁用 */\n disabled?: boolean;\n popperAppendToBody?: boolean;\n /** 弹出窗口偏移 */\n popperOffset?: number;\n expandIcon?: IconProps;\n collapseIcon?: IconProps;\n title?: string;\n icon?: IconProps | string;\n showArrow?: boolean;\n toolTipCfg?: ToolTipProps;\n}\n\ndefineProps({\n \"index\": null,\n \"showTimeout\": { default: 300 },\n \"hideTimeout\": { default: 300 },\n \"popperClass\": null,\n \"disabled\": { type: Boolean, },\n \"popperAppendToBody\": { type: Boolean, default: undefined },\n \"popperOffset\": { default: 6 },\n \"expandIcon\": { default: {} },\n \"collapseIcon\": { default: {} },\n \"title\": null,\n \"icon\": null,\n \"showArrow\": { type: Boolean, default: true },\n \"toolTipCfg\": null\n})\n\n\n\n;\n\nconst instance = getCurrentInstance()!;\n\n// 返回当前 sub-menu 对应的 indexPath 页面中对 submenu 定义的 index parentMenu -> vft-menu 组件\nconst { indexPath, parentMenu } = useMenu(instance, computed(() => __props.index));\n\nconst nsMenu = useNamespace('menu');\nconst nsSubMenu = useNamespace('sub-menu');\n\n// 接受 vft-menu 组件中注入的数据\nconst rootMenu = inject<MenuProvider>('rootMenu');\nif (!rootMenu) throwError(ns.b(), 'can not inject root menu');\n\n// 接受 vft-menu 组件中注入的数据 parentMenu.value!.uid 当前 sub-menu 组件对应的 menu.vue 组件\nconst subMenu = inject<SubMenuProvider>(`subMenu:${parentMenu.value!.uid}`);\nif (!subMenu) throwError(ns.b(), 'can not inject sub menu');\n\n/**\n * 格式如下\n * ```\n * {\n * 1-1:{index: '1-1', indexPath: ['mio', '1-1'], active: false},\n * 1-2:{index: '1-2', indexPath: ['mio', '1-2'], active: false}\n * }\n * ```\n * @param {MenuItemRegistered} item\n */\nconst subMenus = ref<MenuProvider['subMenus']>({});\n\nlet timeout: (() => void) | undefined;\nconst mouseInChild = ref(false);\n\n// sub-menu-title 的 ref\nconst verticalTitleRef = ref<HTMLDivElement>();\n// tooltip 的实例\nconst vPopper = ref(null);\n\n// toolTop 的展示位置\nconst currentPlacement = computed<Placement>(\n () => (mode.value === 'horizontal' && isFirstLevel.value ? 'bottom-start' : 'right-start'));\n\n// 是否为第一级的 subMenu\nconst isFirstLevel = computed(() => {\n return subMenu.level === 0;\n});\n\nconst appendToBody = computed(() => {\n return __props.popperAppendToBody === undefined ? isFirstLevel.value : Boolean(__props.popperAppendToBody);\n});\n\n// toolTip 弹出的动画名称\nconst menuTransitionName = computed(\n () => (rootMenu.props.collapse ? `${nsMenu.namespace.value}-zoom-in-left` : `${nsMenu.namespace.value}-zoom-in-top`));\n\nconst fallbackPlacements = computed<Placement[]>(() =>\n mode.value === 'horizontal' && isFirstLevel.value\n ? ['bottom-start', 'bottom-end', 'top-start', 'top-end', 'right-start', 'left-start']\n : ['right-start', 'left-start', 'bottom-start', 'bottom-end', 'top-start', 'top-end']\n);\n\n// 获取当前的 index 是否包含在 openedMenus 中,表示当前 sub-menu 是否已经展开,子节点就是通过这个使用 v-show 来显隐\nconst opened = computed(() => rootMenu.openedMenus.includes(__props.index));\n\nconst active = computed(() => {\n let isActive = false;\n Object.values(subMenus.value).forEach((subItem) => {\n if (subItem.active) {\n isActive = true;\n }\n });\n if (__props.index === rootMenu.activeIndex) {\n isActive = true;\n }\n return isActive;\n});\n\nconst backgroundColor = computed(() => rootMenu.props.backgroundColor || '');\n\nconst activeTextColor = computed(() => rootMenu.props.activeTextColor || '');\n\nconst textColor = computed(() => rootMenu.props.textColor || '');\n\nconst mode = computed(() => rootMenu.props.mode);\n\nconst item = reactive({\n index: __props.index,\n indexPath,\n active\n});\n\n//\nconst titleStyle = computed<CSSProperties>(() => {\n if (mode.value !== 'horizontal') {\n return {\n color: textColor.value\n };\n }\n return {\n borderBottomColor: active.value ? (rootMenu.props.activeTextColor ? activeTextColor.value : '') : 'transparent',\n color: active.value ? activeTextColor.value : textColor.value\n };\n});\n\n// 销毁 toolTip\nconst doDestroy = () => vPopper.value?.popperRef?.popperInstanceRef?.destroy();\n\n// 当菜单收缩展开时执行销毁 toolTip\nconst handleCollapseToggle = (value: boolean) => {\n if (!value) {\n doDestroy();\n }\n};\n\n// sub-menu 菜单点击事件\nconst handleClick = () => {\n // 以下几种情况不执行点击事件操作\n if ((rootMenu.props.menuTrigger === 'hover' && rootMenu.props.mode === 'horizontal') || (rootMenu.props.collapse && rootMenu.props.mode === 'vertical') || __props.disabled) return;\n\n // 调用 menn.vue 中的 handleSubMenuClick 点击事件,传入参数\n rootMenu.handleSubMenuClick({\n index: __props.index,\n indexPath: indexPath.value,\n active: active.value\n });\n};\n\n// 滑入 sub-menu 菜单事件\nconst handleMouseenter = (event: MouseEvent | FocusEvent, _showTimeout = __props.showTimeout) => {\n if (event.type === 'focus') {\n return;\n }\n if ((rootMenu.props.menuTrigger === 'click' && rootMenu.props.mode === 'horizontal') || (!rootMenu.props.collapse && rootMenu.props.mode === 'vertical') || __props.disabled) {\n return;\n }\n subMenu.mouseInChild.value = true;\n\n // 根据 _showTimeout 展开滑入的菜单子项\n timeout?.();\n ({ stop: timeout } = useTimeoutFn(() => {\n rootMenu.openMenu(__props.index, indexPath.value);\n }, _showTimeout));\n\n if (appendToBody.value) {\n parentMenu.value.vnode.el?.dispatchEvent(new MouseEvent('mouseenter'));\n }\n};\n\n// 离开滑入的菜单\nconst handleMouseleave = (deepDispatch = false) => {\n if ((rootMenu.props.menuTrigger === 'click' && rootMenu.props.mode === 'horizontal') || (!rootMenu.props.collapse && rootMenu.props.mode === 'vertical')) {\n return;\n }\n timeout?.();\n subMenu.mouseInChild.value = false;\n ({ stop: timeout } = useTimeoutFn(\n () => !mouseInChild.value && rootMenu.closeMenu(__props.index, indexPath.value),\n __props.hideTimeout));\n\n if (appendToBody.value && deepDispatch) {\n if (instance.parent?.type.name === 'vft-sub-menu') {\n subMenu.handleMouseleave?.(true);\n }\n }\n};\n\n// 监听菜单的收缩展开决定是否销毁 ToolTip\nwatch(\n () => rootMenu.props.collapse,\n (value) => handleCollapseToggle(Boolean(value))\n);\n\n// 以下代码在 menu-item.vue 中触发\n{\n /**\n * 此函数在 menu-item 中触发,items.value 默认为空对象\n * 最后添加后的 items 格式如下\n * ```\n * {\n * 1-1:{index: '1-1', indexPath: ['mio', '1-1'], active: false},\n * 1-2:{index: '1-2', indexPath: ['mio', '1-2'], active: false}\n * }\n * ```\n * @param {MenuItemRegistered} item\n */\n const addSubMenu: SubMenuProvider['addSubMenu'] = (item) => {\n subMenus.value[item.index] = item;\n };\n const removeSubMenu: SubMenuProvider['removeSubMenu'] = (item) => {\n delete subMenus.value[item.index];\n };\n provide<SubMenuProvider>(`subMenu:${instance.uid}`, {\n addSubMenu,\n removeSubMenu,\n handleMouseleave,\n mouseInChild,\n level: subMenu.level + 1\n });\n}\n\ndefineExpose({\n opened\n});\n\nonMounted(() => {\n rootMenu.addSubMenu(item);\n subMenu.addSubMenu(item);\n});\n\nonBeforeUnmount(() => {\n subMenu.removeSubMenu(item);\n rootMenu.removeSubMenu(item);\n});\n\nconst slots = useSlots();\n\n// 箭头设置\nconst subMenuIcon = computed(() => {\n // 水平模式第一级 或者 竖直非折叠\n return (mode.value === 'horizontal' && isFirstLevel.value) || (mode.value === 'vertical' && !rootMenu.props.collapse)\n ? { icon: 'vi-arrow-down', size: 20, ...__props.expandIcon } :\n { icon: 'vi-arrow-right', size: 18, ...__props.collapseIcon };\n});\n\nconst _icon = computed(() => {\n return singleAttrToObj(__props.icon, 'icon') as IconProps;\n});\n\nconst titleCon = computed(() => {\n return renderTNode(instance, 'title');\n});\n\ndefineRender(() => {\n // sub-menu 的标题以及展开箭头 icon 相关\n const titleTag: VNodeArrayChildren = [\n _icon.value?.icon ? h(Icon, { ..._icon.value }) : null,\n h(\n 'span',\n {\n class: __props.showArrow ? nsSubMenu.e('text') : '',\n title: instance.props.title\n },\n titleCon.value\n ),\n __props.showArrow ? h(\n Icon,\n {\n class: nsSubMenu.e('icon-arrow'),\n ...subMenuIcon.value,\n style: { transform: opened.value ? 'rotateZ(180deg)' : 'none' }\n }\n ) : false\n ];\n\n // 给 vft-menu class 这一栏加入 level 等级,以此来区分当前的 level: --vft-menu-level:2;\n const ulStyle = useMenuCssVar(rootMenu.props, subMenu.level + 1);\n\n /**\n * rootMenu.isMenuPopup 是否需要 tooltip 1.水平模式的菜单需要 2.竖直类型的菜单在收缩时需要\n * 如果需要 tooltip 用 h 函数渲染时,则采用 ElTooltip 组件\n * @type {VNode}\n */\n const child = rootMenu.isMenuPopup\n ? h(\n Tooltip,\n {\n ref: vPopper,\n visible: opened.value,\n effect: 'light',\n pure: true,\n offset: __props.popperOffset,\n showArrow: false,\n persistent: true,\n popperClass: __props.popperClass,\n placement: currentPlacement.value,\n teleported: appendToBody.value,\n fallbackPlacements: fallbackPlacements.value,\n transition: menuTransitionName.value,\n gpuAcceleration: false,\n ...__props.toolTipCfg\n },\n {\n content: () =>\n h(\n 'div',\n {\n class: [nsMenu.m(mode.value), nsMenu.m('popup-container'), __props.popperClass],\n onMouseenter: (evt: MouseEvent) => handleMouseenter(evt, 100),\n onMouseleave: () => handleMouseleave(true),\n onFocus: (evt: FocusEvent) => handleMouseenter(evt, 100)\n },\n [\n h(\n 'ul',\n {\n class: [nsMenu.b(), nsMenu.m('popup'), nsMenu.m(\n `popup-${currentPlacement.value}`)],\n style: ulStyle.value\n },\n [slots.default?.()]\n )\n ]\n ),\n default: () =>\n h(\n 'div',\n {\n class: nsSubMenu.e('title'),\n style: [titleStyle.value, { backgroundColor: backgroundColor.value }],\n onClick: handleClick\n },\n titleTag\n )\n }\n )\n :\n /**\n * Fragment 碎片化节点,可以让 dom 没有根节点\n *\n * 以下是无需 tooltip 渲染的组件,通常是侧边栏没有折叠的时候\n */\n h(Fragment, {}, [\n titleCon.value ? h(\n 'div',\n {\n class: nsSubMenu.e('title'),\n style: [titleStyle.value, { backgroundColor: backgroundColor.value }],\n ref: verticalTitleRef,\n onClick: handleClick\n },\n titleTag\n ) : null,\n h(\n CollapseTransition,\n {},\n {\n default: () =>\n withDirectives(\n h(\n 'ul',\n {\n role: 'menu',\n class: [nsMenu.b(), nsMenu.m('inline')],\n style: ulStyle.value\n },\n [slots.default?.()]\n ),\n [[vShow, opened.value]]\n )\n }\n )\n ]);\n\n return h(\n 'li',\n {\n class: [nsSubMenu.b(), nsSubMenu.is('active', active.value),\n nsSubMenu.is('opened', opened.value), nsSubMenu.is('disabled', __props.disabled)],\n role: 'menuitem',\n ariaHaspopup: true,\n ariaExpanded: opened.value,\n onMouseenter: handleMouseenter,\n onMouseleave: () => handleMouseleave(true),\n onFocus: handleMouseenter\n },\n [child]\n );\n});\n</script>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","name","b","instance","getCurrentInstance","indexPath","parentMenu","useMenu","computed","__props","index","nsMenu","nsSubMenu","rootMenu","inject","throwError","subMenu","value","uid","subMenus","ref","timeout","mouseInChild","verticalTitleRef","vPopper","currentPlacement","mode","isFirstLevel","level","appendToBody","popperAppendToBody","undefined","Boolean","menuTransitionName","props","collapse","namespace","fallbackPlacements","opened","openedMenus","includes","active","isActive","Object","values","forEach","subItem","activeIndex","backgroundColor","activeTextColor","textColor","item","reactive","titleStyle","color","borderBottomColor","doDestroy","popperRef","popperInstanceRef","destroy","handleCollapseToggle","handleClick","menuTrigger","disabled","handleSubMenuClick","handleMouseenter","event","_showTimeout","showTimeout","type","stop","useTimeoutFn","openMenu","vnode","el","dispatchEvent","MouseEvent","handleMouseleave","deepDispatch","closeMenu","hideTimeout","parent","watch","addSubMenu","removeSubMenu","provide","expose","onMounted","onBeforeUnmount","slots","useSlots","subMenuIcon","icon","size","expandIcon","collapseIcon","_icon","singleAttrToObj","titleCon","renderTNode","titleTag","h","Icon","class","showArrow","e","title","style","transform","ulStyle","useMenuCssVar","child","isMenuPopup","Tooltip","visible","effect","pure","offset","popperOffset","persistent","popperClass","placement","teleported","transition","gpuAcceleration","toolTipCfg","content","m","onMouseenter","evt","onMouseleave","onFocus","default","onClick","Fragment","CollapseTransition","withDirectives","role","vShow","is","ariaHaspopup","ariaExpanded"],"mappings":"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"}
1
+ {"version":3,"file":"sub-menu.vue2.mjs","sources":["../../../../../packages/components/menu/sub-menu.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst ns = /* hoist-static*/ useNamespace('sub-menu')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n name: ns.b()\n});</script>\n<script lang=\"tsx\" setup>\nimport { type IconProps, type Placement, type ToolTipProps, VftCollapseTransition as CollapseTransition, VftIcon as Icon, VftTooltip as Tooltip } from '@vft-ui/components';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { throwError } from '@vft-ui/utils';\nimport { renderTNode, singleAttrToObj } from '@vft/utils';\nimport { useTimeoutFn } from '@vueuse/core';\nimport type { CSSProperties, VNodeArrayChildren } from 'vue';\nimport { computed, Fragment, getCurrentInstance, h, inject, onBeforeUnmount, onMounted, provide, reactive, ref, useSlots, vShow, watch, withDirectives } from 'vue';\nimport type { MenuProvider, SubMenuProvider } from './types';\nimport useMenu from './use-menu';\nimport { useMenuCssVar } from './use-menu-css-var';\n\ninterface Props {\n /** 唯一标志 */\n index: string;\n /** 展开 sub-menu 的延时 */\n showTimeout?: number;\n /** 收起 sub-menu 的延时 */\n hideTimeout?: number;\n /** 为 popper 添加类名 */\n popperClass?: ClassType;\n /** 是否禁用 */\n disabled?: boolean;\n popperAppendToBody?: boolean;\n /** 弹出窗口偏移 */\n popperOffset?: number;\n expandIcon?: IconProps;\n collapseIcon?: IconProps;\n title?: string;\n icon?: IconProps | string;\n showArrow?: boolean;\n toolTipCfg?: ToolTipProps;\n}\n\ndefineProps({\n \"index\": null,\n \"showTimeout\": { default: 300 },\n \"hideTimeout\": { default: 300 },\n \"popperClass\": null,\n \"disabled\": { type: Boolean, },\n \"popperAppendToBody\": { type: Boolean, default: undefined },\n \"popperOffset\": { default: 6 },\n \"expandIcon\": { default: {} },\n \"collapseIcon\": { default: {} },\n \"title\": null,\n \"icon\": null,\n \"showArrow\": { type: Boolean, default: true },\n \"toolTipCfg\": null\n})\n\n\n\n;\n\nconst instance = getCurrentInstance()!;\n\n// 返回当前 sub-menu 对应的 indexPath 页面中对 submenu 定义的 index parentMenu -> vft-menu 组件\nconst { indexPath, parentMenu } = useMenu(instance, computed(() => __props.index));\n\nconst nsMenu = useNamespace('menu');\nconst nsSubMenu = useNamespace('sub-menu');\n\n// 接受 vft-menu 组件中注入的数据\nconst rootMenu = inject<MenuProvider>('rootMenu');\nif (!rootMenu) throwError(ns.b(), 'can not inject root menu');\n\n// 接受 vft-menu 组件中注入的数据 parentMenu.value!.uid 当前 sub-menu 组件对应的 menu.vue 组件\nconst subMenu = inject<SubMenuProvider>(`subMenu:${parentMenu.value!.uid}`);\nif (!subMenu) throwError(ns.b(), 'can not inject sub menu');\n\n/**\n * 格式如下\n * ```\n * {\n * 1-1:{index: '1-1', indexPath: ['mio', '1-1'], active: false},\n * 1-2:{index: '1-2', indexPath: ['mio', '1-2'], active: false}\n * }\n * ```\n * @param {MenuItemRegistered} item\n */\nconst subMenus = ref<MenuProvider['subMenus']>({});\n\nlet timeout: (() => void) | undefined;\nconst mouseInChild = ref(false);\n\n// sub-menu-title 的 ref\nconst verticalTitleRef = ref<HTMLDivElement>();\n// tooltip 的实例\nconst vPopper = ref(null);\n\n// toolTop 的展示位置\nconst currentPlacement = computed<Placement>(\n () => (mode.value === 'horizontal' && isFirstLevel.value ? 'bottom-start' : 'right-start'));\n\n// 是否为第一级的 subMenu\nconst isFirstLevel = computed(() => {\n return subMenu.level === 0;\n});\n\nconst appendToBody = computed(() => {\n return __props.popperAppendToBody === undefined ? isFirstLevel.value : Boolean(__props.popperAppendToBody);\n});\n\n// toolTip 弹出的动画名称\nconst menuTransitionName = computed(\n () => (rootMenu.props.collapse ? `${nsMenu.namespace.value}-zoom-in-left` : `${nsMenu.namespace.value}-zoom-in-top`));\n\nconst fallbackPlacements = computed<Placement[]>(() =>\n mode.value === 'horizontal' && isFirstLevel.value\n ? ['bottom-start', 'bottom-end', 'top-start', 'top-end', 'right-start', 'left-start']\n : ['right-start', 'left-start', 'bottom-start', 'bottom-end', 'top-start', 'top-end']\n);\n\n// 获取当前的 index 是否包含在 openedMenus 中,表示当前 sub-menu 是否已经展开,子节点就是通过这个使用 v-show 来显隐\nconst opened = computed(() => rootMenu.openedMenus.includes(__props.index));\n\nconst active = computed(() => {\n let isActive = false;\n Object.values(subMenus.value).forEach((subItem) => {\n if (subItem.active) {\n isActive = true;\n }\n });\n if (__props.index === rootMenu.activeIndex) {\n isActive = true;\n }\n return isActive;\n});\n\nconst backgroundColor = computed(() => rootMenu.props.backgroundColor || '');\n\nconst activeTextColor = computed(() => rootMenu.props.activeTextColor || '');\n\nconst textColor = computed(() => rootMenu.props.textColor || '');\n\nconst mode = computed(() => rootMenu.props.mode);\n\nconst item = reactive({\n index: __props.index,\n indexPath,\n active\n});\n\n//\nconst titleStyle = computed<CSSProperties>(() => {\n if (mode.value !== 'horizontal') {\n return {\n color: textColor.value\n };\n }\n return {\n borderBottomColor: active.value ? (rootMenu.props.activeTextColor ? activeTextColor.value : '') : 'transparent',\n color: active.value ? activeTextColor.value : textColor.value\n };\n});\n\n// 销毁 toolTip\nconst doDestroy = () => vPopper.value?.popperRef?.popperInstanceRef?.destroy();\n\n// 当菜单收缩展开时执行销毁 toolTip\nconst handleCollapseToggle = (value: boolean) => {\n if (!value) {\n doDestroy();\n }\n};\n\n// sub-menu 菜单点击事件\nconst handleClick = () => {\n // 以下几种情况不执行点击事件操作\n if ((rootMenu.props.menuTrigger === 'hover' && rootMenu.props.mode === 'horizontal') || (rootMenu.props.collapse && rootMenu.props.mode === 'vertical') || __props.disabled) return;\n\n // 调用 menn.vue 中的 handleSubMenuClick 点击事件,传入参数\n rootMenu.handleSubMenuClick({\n index: __props.index,\n indexPath: indexPath.value,\n active: active.value\n });\n};\n\n// 滑入 sub-menu 菜单事件\nconst handleMouseenter = (event: MouseEvent | FocusEvent, _showTimeout = __props.showTimeout) => {\n if (event.type === 'focus') {\n return;\n }\n if ((rootMenu.props.menuTrigger === 'click' && rootMenu.props.mode === 'horizontal') || (!rootMenu.props.collapse && rootMenu.props.mode === 'vertical') || __props.disabled) {\n return;\n }\n subMenu.mouseInChild.value = true;\n\n // 根据 _showTimeout 展开滑入的菜单子项\n timeout?.();\n ({ stop: timeout } = useTimeoutFn(() => {\n rootMenu.openMenu(__props.index, indexPath.value);\n }, _showTimeout));\n\n if (appendToBody.value) {\n parentMenu.value.vnode.el?.dispatchEvent(new MouseEvent('mouseenter'));\n }\n};\n\n// 离开滑入的菜单\nconst handleMouseleave = (deepDispatch = false) => {\n if ((rootMenu.props.menuTrigger === 'click' && rootMenu.props.mode === 'horizontal') || (!rootMenu.props.collapse && rootMenu.props.mode === 'vertical')) {\n return;\n }\n timeout?.();\n subMenu.mouseInChild.value = false;\n ({ stop: timeout } = useTimeoutFn(\n () => !mouseInChild.value && rootMenu.closeMenu(__props.index, indexPath.value),\n __props.hideTimeout));\n\n if (appendToBody.value && deepDispatch) {\n if (instance.parent?.type.name === 'vft-sub-menu') {\n subMenu.handleMouseleave?.(true);\n }\n }\n};\n\n// 监听菜单的收缩展开决定是否销毁 ToolTip\nwatch(\n () => rootMenu.props.collapse,\n (value) => handleCollapseToggle(Boolean(value))\n);\n\n// 以下代码在 menu-item.vue 中触发\n{\n /**\n * 此函数在 menu-item 中触发,items.value 默认为空对象\n * 最后添加后的 items 格式如下\n * ```\n * {\n * 1-1:{index: '1-1', indexPath: ['mio', '1-1'], active: false},\n * 1-2:{index: '1-2', indexPath: ['mio', '1-2'], active: false}\n * }\n * ```\n * @param {MenuItemRegistered} item\n */\n const addSubMenu: SubMenuProvider['addSubMenu'] = (item) => {\n subMenus.value[item.index] = item;\n };\n const removeSubMenu: SubMenuProvider['removeSubMenu'] = (item) => {\n delete subMenus.value[item.index];\n };\n provide<SubMenuProvider>(`subMenu:${instance.uid}`, {\n addSubMenu,\n removeSubMenu,\n handleMouseleave,\n mouseInChild,\n level: subMenu.level + 1\n });\n}\n\ndefineExpose({\n opened\n});\n\nonMounted(() => {\n rootMenu.addSubMenu(item);\n subMenu.addSubMenu(item);\n});\n\nonBeforeUnmount(() => {\n subMenu.removeSubMenu(item);\n rootMenu.removeSubMenu(item);\n});\n\nconst slots = useSlots();\n\n// 箭头设置\nconst subMenuIcon = computed(() => {\n // 水平模式第一级 或者 竖直非折叠\n return (mode.value === 'horizontal' && isFirstLevel.value) || (mode.value === 'vertical' && !rootMenu.props.collapse)\n ? { icon: 'vi-arrow-down', size: 20, ...__props.expandIcon } :\n { icon: 'vi-arrow-right', size: 18, ...__props.collapseIcon };\n});\n\nconst _icon = computed(() => {\n return singleAttrToObj(__props.icon, 'icon') as IconProps;\n});\n\nconst titleCon = computed(() => {\n return renderTNode(instance, 'title');\n});\n\ndefineRender(() => {\n // sub-menu 的标题以及展开箭头 icon 相关\n const titleTag: VNodeArrayChildren = [\n _icon.value?.icon ? h(Icon, { ..._icon.value }) : null,\n h(\n 'span',\n {\n class: __props.showArrow ? nsSubMenu.e('text') : '',\n title: instance.props.title\n },\n titleCon.value\n ),\n __props.showArrow ? h(\n Icon,\n {\n class: nsSubMenu.e('icon-arrow'),\n ...subMenuIcon.value,\n style: { transform: opened.value ? 'rotateZ(180deg)' : 'none' }\n }\n ) : false\n ];\n\n // 给 vft-menu class 这一栏加入 level 等级,以此来区分当前的 level: --vft-menu-level:2;\n const ulStyle = useMenuCssVar(rootMenu.props, subMenu.level + 1);\n\n /**\n * rootMenu.isMenuPopup 是否需要 tooltip 1.水平模式的菜单需要 2.竖直类型的菜单在收缩时需要\n * 如果需要 tooltip 用 h 函数渲染时,则采用 ElTooltip 组件\n * @type {VNode}\n */\n const child = rootMenu.isMenuPopup\n ? h(\n Tooltip,\n {\n ref: vPopper,\n visible: opened.value,\n effect: 'light',\n pure: true,\n offset: __props.popperOffset,\n showArrow: false,\n persistent: true,\n popperClass: __props.popperClass,\n placement: currentPlacement.value,\n teleported: appendToBody.value,\n fallbackPlacements: fallbackPlacements.value,\n transition: menuTransitionName.value,\n gpuAcceleration: false,\n ...__props.toolTipCfg\n },\n {\n content: () =>\n h(\n 'div',\n {\n class: [nsMenu.m(mode.value), nsMenu.m('popup-container'), __props.popperClass],\n onMouseenter: (evt: MouseEvent) => handleMouseenter(evt, 100),\n onMouseleave: () => handleMouseleave(true),\n onFocus: (evt: FocusEvent) => handleMouseenter(evt, 100)\n },\n [\n h(\n 'ul',\n {\n class: [nsMenu.b(), nsMenu.m('popup'), nsMenu.m(\n `popup-${currentPlacement.value}`)],\n style: ulStyle.value\n },\n [slots.default?.()]\n )\n ]\n ),\n default: () =>\n h(\n 'div',\n {\n class: nsSubMenu.e('title'),\n style: [titleStyle.value, { backgroundColor: backgroundColor.value }],\n onClick: handleClick\n },\n titleTag\n )\n }\n )\n :\n /**\n * Fragment 碎片化节点,可以让 dom 没有根节点\n *\n * 以下是无需 tooltip 渲染的组件,通常是侧边栏没有折叠的时候\n */\n h(Fragment, {}, [\n titleCon.value ? h(\n 'div',\n {\n class: nsSubMenu.e('title'),\n style: [titleStyle.value, { backgroundColor: backgroundColor.value }],\n ref: verticalTitleRef,\n onClick: handleClick\n },\n titleTag\n ) : null,\n h(\n CollapseTransition,\n {},\n {\n default: () =>\n withDirectives(\n h(\n 'ul',\n {\n role: 'menu',\n class: [nsMenu.b(), nsMenu.m('inline')],\n style: ulStyle.value\n },\n [slots.default?.()]\n ),\n [[vShow, opened.value]]\n )\n }\n )\n ]);\n\n return h(\n 'li',\n {\n class: [nsSubMenu.b(), nsSubMenu.is('active', active.value),\n nsSubMenu.is('opened', opened.value), nsSubMenu.is('disabled', __props.disabled)],\n role: 'menuitem',\n ariaHaspopup: true,\n ariaExpanded: opened.value,\n onMouseenter: handleMouseenter,\n onMouseleave: () => handleMouseleave(true),\n onFocus: handleMouseenter\n },\n [child]\n );\n});\n</script>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","name","b","instance","getCurrentInstance","indexPath","parentMenu","useMenu","computed","__props","index","nsMenu","nsSubMenu","rootMenu","inject","throwError","subMenu","value","uid","subMenus","ref","timeout","mouseInChild","verticalTitleRef","vPopper","currentPlacement","mode","isFirstLevel","level","appendToBody","popperAppendToBody","undefined","Boolean","menuTransitionName","props","collapse","namespace","fallbackPlacements","opened","openedMenus","includes","active","isActive","Object","values","forEach","subItem","activeIndex","backgroundColor","activeTextColor","textColor","item","reactive","titleStyle","color","borderBottomColor","doDestroy","popperRef","popperInstanceRef","destroy","handleCollapseToggle","handleClick","menuTrigger","disabled","handleSubMenuClick","handleMouseenter","event","_showTimeout","showTimeout","type","stop","useTimeoutFn","openMenu","vnode","el","dispatchEvent","MouseEvent","handleMouseleave","deepDispatch","closeMenu","hideTimeout","parent","watch","addSubMenu","removeSubMenu","provide","expose","onMounted","onBeforeUnmount","slots","useSlots","subMenuIcon","icon","size","expandIcon","collapseIcon","_icon","singleAttrToObj","titleCon","renderTNode","titleTag","h","Icon","class","showArrow","e","title","style","transform","ulStyle","useMenuCssVar","child","isMenuPopup","Tooltip","visible","effect","pure","offset","popperOffset","persistent","popperClass","placement","teleported","transition","gpuAcceleration","toolTipCfg","content","m","onMouseenter","evt","onMouseleave","onFocus","default","onClick","Fragment","CollapseTransition","withDirectives","role","vShow","is","ariaHaspopup","ariaExpanded"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare const VftMultipleTabs: import("vft/es/utils").SFCWithInstall<import("vue").DefineComponent<{
2
+ tabsStyle: {
3
+ type: import("vue").PropType<Record<string, Numberish> | undefined>;
4
+ required: false;
5
+ };
6
+ contextMenuStyle: {
7
+ type: import("vue").PropType<Record<string, Numberish> | undefined>;
8
+ required: false;
9
+ };
10
+ canDrag: {
11
+ type: import("vue").PropType<boolean | undefined>;
12
+ required: false;
13
+ };
14
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
15
+ tabsStyle: {
16
+ type: import("vue").PropType<Record<string, Numberish> | undefined>;
17
+ required: false;
18
+ };
19
+ contextMenuStyle: {
20
+ type: import("vue").PropType<Record<string, Numberish> | undefined>;
21
+ required: false;
22
+ };
23
+ canDrag: {
24
+ type: import("vue").PropType<boolean | undefined>;
25
+ required: false;
26
+ };
27
+ }>>, {}>> & Record<string, any>;
28
+ export default VftMultipleTabs;
29
+ export * from './use';
30
+ export * from './types';
@@ -0,0 +1,16 @@
1
+ import { withInstall as o } from "../../utils/vue/install.mjs";
2
+ import "vue";
3
+ import "@vue/shared";
4
+ import "@vft/utils";
5
+ import t from "./multiple-tabs.vue2.mjs";
6
+ import { useTabDropdown as l } from "./use/use-tab-dropdown.mjs";
7
+ import { initAffixTabs as b, useTabsDrag as u } from "./use/use-multiple-tabs.mjs";
8
+ const f = o(t);
9
+ export {
10
+ f as VftMultipleTabs,
11
+ f as default,
12
+ b as initAffixTabs,
13
+ l as useTabDropdown,
14
+ u as useTabsDrag
15
+ };
16
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/multiple-tabs/index.ts"],"sourcesContent":["import { withInstall } from '@vft-ui/utils'\n\nimport MultipleTabs from './multiple-tabs.vue';\n\nexport const VftMultipleTabs = withInstall(MultipleTabs)\nexport default VftMultipleTabs\nexport * from './use';\nexport * from './types';\n"],"names":["VftMultipleTabs","withInstall","MultipleTabs"],"mappings":";;;;;;;AAIa,MAAAA,IAAkBC,EAAYC,CAAY;"}
@@ -0,0 +1,29 @@
1
+ import type { PropType as __PropType } from 'vue';
2
+ declare const _sfc_main: import("vue").DefineComponent<{
3
+ tabsStyle: {
4
+ type: __PropType<Record<string, Numberish> | undefined>;
5
+ required: false;
6
+ };
7
+ contextMenuStyle: {
8
+ type: __PropType<Record<string, Numberish> | undefined>;
9
+ required: false;
10
+ };
11
+ canDrag: {
12
+ type: __PropType<boolean | undefined>;
13
+ required: false;
14
+ };
15
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
16
+ tabsStyle: {
17
+ type: __PropType<Record<string, Numberish> | undefined>;
18
+ required: false;
19
+ };
20
+ contextMenuStyle: {
21
+ type: __PropType<Record<string, Numberish> | undefined>;
22
+ required: false;
23
+ };
24
+ canDrag: {
25
+ type: __PropType<boolean | undefined>;
26
+ required: false;
27
+ };
28
+ }>>, {}>;
29
+ export default _sfc_main;
@@ -0,0 +1,5 @@
1
+ import f from "./multiple-tabs.vue2.mjs";
2
+ export {
3
+ f as default
4
+ };
5
+ //# sourceMappingURL=multiple-tabs.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiple-tabs.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,152 @@
1
+ import { defineComponent as _, ref as b, computed as h, watchEffect as D, unref as n, openBlock as x, createElementBlock as T, normalizeClass as E, normalizeStyle as H, createVNode as R, withCtx as C, Fragment as K, renderList as F, createBlock as U } from "vue";
2
+ import { useRouterHelper as $, getRouterKeyPath as f, listenerRouteChange as j } from "@vft/router";
3
+ import { useMultipleTabStore as q, useTabs as G } from "@vft/store";
4
+ import { useRefs as J } from "@vft/use";
5
+ import { generateCssVars as S } from "@vft/utils";
6
+ import L from "hotkeys-js";
7
+ import { useRouter as O, onBeforeRouteLeave as Q } from "vue-router";
8
+ import { useNamespace as W } from "../../hooks/use-namespace/index.mjs";
9
+ import "@popperjs/core";
10
+ import "lodash";
11
+ import "../../hooks/use-z-index/index.mjs";
12
+ import "@vueuse/core";
13
+ import "@vue/shared";
14
+ import "../divider/index.mjs";
15
+ import "../icon/index.mjs";
16
+ import "../avatar/index.mjs";
17
+ import "../empty/index.mjs";
18
+ import "../result/index.mjs";
19
+ import "../exception/index.mjs";
20
+ import { VftTabs as X, VftTabPane as Y } from "../tabs/index.mjs";
21
+ import "../popper/index.mjs";
22
+ import "../collapse-transition/index.mjs";
23
+ import "../tooltip/index.mjs";
24
+ import "../popover/index.mjs";
25
+ import "../menu/index.mjs";
26
+ import "./index.mjs";
27
+ import Z from "./tab-content.vue2.mjs";
28
+ import { initAffixTabs as ee, useTabsDrag as te } from "./use/use-multiple-tabs.mjs";
29
+ const P = (
30
+ /* hoist-static*/
31
+ W("multiple-tabs")
32
+ ), oe = _({
33
+ name: P.b()
34
+ }), Ne = /* @__PURE__ */ _({
35
+ ...oe,
36
+ props: {
37
+ tabsStyle: null,
38
+ contextMenuStyle: null,
39
+ canDrag: { type: Boolean }
40
+ },
41
+ setup(p) {
42
+ const a = ee();
43
+ p.canDrag && te(a);
44
+ const s = q(), r = b(""), i = b(0), d = b(), v = O(), { go: g } = $(), c = h(() => s.getTabList.filter((e) => {
45
+ var t;
46
+ return !((t = e.meta) != null && t.hideTab);
47
+ }));
48
+ D(() => {
49
+ var e;
50
+ if (r.value) {
51
+ const t = c.value.findIndex((o) => f(o) === r.value);
52
+ t === -1 ? i.value = ((e = c.value) == null ? void 0 : e.length) - 1 : i.value = t, i.value = i.value < (a == null ? void 0 : a.length) ? (a == null ? void 0 : a.length) - 1 : i.value;
53
+ }
54
+ }), Q(() => {
55
+ d.value = n(v.currentRoute);
56
+ }), j((e) => {
57
+ if (!e)
58
+ return;
59
+ const { meta: t = {} } = e, { currentActivePath: o, hideTab: l } = t, u = l ? o : null, m = f(e);
60
+ if (r.value !== m && (r.value = m), u) {
61
+ let y = v.getRoutes().find((z) => z.path === o);
62
+ y && s.addTab(y, n(d), i.value, e);
63
+ } else
64
+ s.addTab(n(e), n(d), i.value);
65
+ });
66
+ function M(e) {
67
+ var l, u;
68
+ if (r.value === e.paneName)
69
+ return;
70
+ const t = c.value[e.attrs.index];
71
+ r.value = e.paneName;
72
+ const o = (u = (l = t == null ? void 0 : t.meta) == null ? void 0 : l.hideActiveRoute) == null ? void 0 : u.fullPath;
73
+ g(o || t.fullPath || t.path);
74
+ }
75
+ function k(e) {
76
+ s.closeTabByKey(e, v);
77
+ }
78
+ const [B, I] = J();
79
+ function N(e) {
80
+ const t = e.pane.attrs.index, o = e.event;
81
+ B.value[t].handleContext(o);
82
+ }
83
+ const w = h(() => ({ ...S({
84
+ padding: "4px 0 0",
85
+ "header-height": "26px",
86
+ "item-color": "#5C5C5C",
87
+ "item-bg-color": "#f8f8f8",
88
+ "font-size": "13px",
89
+ "item-padding": "0 10px",
90
+ "close-icon-left": "8px",
91
+ "item-distance": "10px",
92
+ "item-max-width": "348px",
93
+ "header-margin": "0 0 0 8px"
94
+ }, "tabs"), ...p.tabsStyle })), { closeCurrent: V } = G();
95
+ L("command+e, ctrl+e", function() {
96
+ return V(), !1;
97
+ });
98
+ const A = h(() => ({
99
+ ...S({
100
+ border: "1px solid #dcdfe6",
101
+ "sub-item-height": "40px",
102
+ "item-min-width": "150px"
103
+ }, "menu"),
104
+ ...p.contextMenuStyle
105
+ }));
106
+ return (e, t) => (x(), T("div", {
107
+ class: E(n(P).b()),
108
+ style: H(n(w))
109
+ }, [
110
+ R(n(X), {
111
+ "model-value": r.value,
112
+ "onUpdate:modelValue": t[0] || (t[0] = (o) => r.value = o),
113
+ type: "card",
114
+ onTabClick: M,
115
+ onTabRemove: k,
116
+ onTabContextMenu: N,
117
+ closeIconCfg: { color: "white" }
118
+ }, {
119
+ default: C(() => [
120
+ (x(!0), T(K, null, F(n(c), (o, l) => {
121
+ var u;
122
+ return x(), U(n(Y), {
123
+ key: n(f)(o) + l,
124
+ closable: !((u = o.meta) != null && u.affix),
125
+ index: l,
126
+ name: n(f)(o)
127
+ }, {
128
+ label: C(() => {
129
+ var m;
130
+ return [
131
+ R(Z, {
132
+ contextMenuStyle: n(A),
133
+ affixNum: (m = n(a)) == null ? void 0 : m.length,
134
+ ref_for: !0,
135
+ ref: n(I)(l),
136
+ tabItem: o
137
+ }, null, 8, ["contextMenuStyle", "affixNum", "tabItem"])
138
+ ];
139
+ }),
140
+ _: 2
141
+ }, 1032, ["closable", "index", "name"]);
142
+ }), 128))
143
+ ]),
144
+ _: 1
145
+ }, 8, ["model-value"])
146
+ ], 6));
147
+ }
148
+ });
149
+ export {
150
+ Ne as default
151
+ };
152
+ //# sourceMappingURL=multiple-tabs.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiple-tabs.vue2.mjs","sources":["../../../../../packages/components/multiple-tabs/multiple-tabs.vue"],"sourcesContent":["<script lang=\"ts\">\nconst ns = /* hoist-static*/ useNamespace('multiple-tabs')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n name: ns.b()\n});</script>\n<script lang=\"ts\" setup>\nimport { getRouterKeyPath, listenerRouteChange, useRouterHelper } from '@vft/router';\nimport { useMultipleTabStore, useTabs } from '@vft/store';\nimport { useRefs } from '@vft/use';\nimport { generateCssVars } from '@vft/utils';\nimport hotkeys from 'hotkeys-js';\nimport { computed, ref, unref, watchEffect } from 'vue';\nimport type { RouteLocationNormalized, RouteMeta } from 'vue-router';\nimport { useRouter, onBeforeRouteLeave } from 'vue-router';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { VftTabs, VftTabPane, type TabsPaneContext } from '@vft-ui/components';\n\nimport TabContent from './tab-content.vue';\nimport type { TabContentExpose } from './types';\nimport { initAffixTabs, useTabsDrag } from './use';\n\ninterface MultipleTabsProps {\n tabsStyle?: Record<string, Numberish>;\n contextMenuStyle?: Record<string, Numberish>;\n canDrag?: boolean;\n}\n\ndefineProps({\n \"tabsStyle\": null,\n \"contextMenuStyle\": null,\n \"canDrag\": { type: Boolean, }\n})\n\n\n\n;\n\nconst affixList = initAffixTabs();\n\nif (__props.canDrag) {\n useTabsDrag(affixList);\n}\n\nconst tabStore = useMultipleTabStore();\n\n// active path for tab\nconst activePathRef = ref('');\nconst activeIndex = ref(0);\nconst fromRoute = ref();\n\nconst router = useRouter();\nconst { go } = useRouterHelper();\n\n// get current tab list\nconst getTabsState = computed(() => {\n return tabStore.getTabList.filter((item) => {\n return !item.meta?.hideTab;\n });\n});\n\n\nwatchEffect(() => {\n if (activePathRef.value) {\n const _activeIndex = getTabsState.value.findIndex(item => {\n return getRouterKeyPath(item) === activePathRef.value;\n });\n if (_activeIndex === -1) {\n activeIndex.value = getTabsState.value?.length - 1;\n } else {\n activeIndex.value = _activeIndex;\n }\n activeIndex.value = activeIndex.value < affixList?.length ? affixList?.length - 1 : activeIndex.value;\n }\n});\n\nonBeforeRouteLeave(() => {\n fromRoute.value = unref(router.currentRoute);\n});\n\nlistenerRouteChange((route) => {\n if (!route) {\n return;\n }\n\n const { meta = {} } = route;\n const { currentActivePath, hideTab } = meta as RouteMeta;\n\n const isHide = !hideTab ? null : currentActivePath;\n\n // set current active tab value\n const activePath = getRouterKeyPath(route);\n\n if (activePathRef.value !== activePath) {\n activePathRef.value = activePath;\n }\n\n if (isHide) {\n // 如果当前 tab 是隐藏的,则从路由中根据 currentActivePath 寻找到此路由的信息,然后在 tabStore 添加此路由\n let findParentRoute = router.getRoutes().find((item) => item.path === currentActivePath);\n findParentRoute && tabStore.addTab(findParentRoute as unknown as RouteLocationNormalized, unref(fromRoute), activeIndex.value, route);\n } else {\n tabStore.addTab(unref(route), unref(fromRoute), activeIndex.value);\n }\n});\n\n// 点击 tab 根据 tab 传入的 path 路径,跳转到对应页面\nfunction handleClick (pane: TabsPaneContext) {\n if (activePathRef.value === pane.paneName) {\n \treturn;\n }\n const clickTab = getTabsState.value[pane.attrs.index];\n activePathRef.value = pane.paneName as string;\n const hideActiveRoutePath = (clickTab?.meta?.hideActiveRoute as RouteLocationNormalized)?.fullPath;\n if (hideActiveRoutePath) {\n go(hideActiveRoutePath);\n } else {\n go(clickTab.fullPath || clickTab.path);\n }\n}\n\n// click x close tab\nfunction handleRemove (targetPath: string) {\n tabStore.closeTabByKey(targetPath, router);\n}\n\nconst [refs, setRefs] = useRefs<TabContentExpose>();\n\nfunction handleContextMenu (data: {pane: {attrs: {index: number;};}; event: any;}) {\n const _index = data.pane.attrs.index;\n const _event = data.event;\n refs.value[_index].handleContext(_event);\n}\n\nconst _tabsStyle = computed(() => {\n let initTabStyle: Record<string, Numberish> = {\n padding: '4px 0 0',\n 'header-height': '26px',\n 'item-color': '#5C5C5C',\n 'item-bg-color': '#f8f8f8',\n 'font-size': '13px',\n 'item-padding': '0 10px',\n 'close-icon-left': '8px',\n 'item-distance': '10px',\n 'item-max-width': '348px',\n 'header-margin': '0 0 0 8px'\n };\n\n return { ...generateCssVars(initTabStyle, 'tabs'), ...__props.tabsStyle };\n});\n\nconst { closeCurrent } = useTabs();\n\nhotkeys('command+e, ctrl+e', function () {\n closeCurrent();\n return false;\n});\n\nconst _contextMenuStyle = computed(() => {\n return {\n ...generateCssVars({\n border: '1px solid #dcdfe6',\n 'sub-item-height': '40px',\n 'item-min-width': '150px'\n }, 'menu'),\n ...__props.contextMenuStyle\n };\n});\n</script>\n\n<template>\n <div :class=\"ns.b()\" :style=\"_tabsStyle\">\n <vft-tabs\n v-model:model-value=\"activePathRef\"\n type=\"card\"\n @tabClick=\"handleClick\"\n @tabRemove=\"handleRemove\"\n @tabContextMenu=\"handleContextMenu\"\n :closeIconCfg=\"{ color: 'white'}\"\n >\n <!--why key add index:key not update after sort -->\n <template v-for=\"(item, index) in getTabsState\" :key=\"getRouterKeyPath(item) + index\">\n <vft-tab-pane :closable=\"!(item.meta?.affix)\" :index=\"index\" :name=\"getRouterKeyPath(item)\">\n <template #label>\n <tab-content :contextMenuStyle=\"_contextMenuStyle\" :affixNum=\"affixList?.length\"\n :ref=\"setRefs(index)\" :tabItem=\"item\" />\n </template>\n </vft-tab-pane>\n </template>\n </vft-tabs>\n </div>\n</template>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","affixList","initAffixTabs","__props","useTabsDrag","tabStore","useMultipleTabStore","activePathRef","ref","activeIndex","fromRoute","router","useRouter","go","useRouterHelper","getTabsState","computed","item","_a","watchEffect","_activeIndex","getRouterKeyPath","onBeforeRouteLeave","unref","listenerRouteChange","route","meta","currentActivePath","hideTab","isHide","activePath","findParentRoute","handleClick","pane","clickTab","hideActiveRoutePath","_b","handleRemove","targetPath","refs","setRefs","useRefs","handleContextMenu","data","_index","_event","_tabsStyle","generateCssVars","closeCurrent","useTabs","hotkeys","_contextMenuStyle"],"mappings":"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"}
File without changes
@@ -0,0 +1,3 @@
1
+ import "vft/theme-style/base.css";
2
+ import "vft/theme-style/vft-multiple-tabs.css";
3
+ //# sourceMappingURL=css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
File without changes
@@ -0,0 +1,3 @@
1
+ import "../../../theme-style/src/base.scss.mjs";
2
+ import "../../../theme-style/src/multiple-tabs.scss.mjs";
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,32 @@
1
+ import type { PropType as __PropType } from 'vue';
2
+ import { type RouteLocationNormalized } from 'vue-router';
3
+ declare const _sfc_main: import("vue").DefineComponent<{
4
+ tabItem: {
5
+ type: __PropType<RouteLocationNormalized>;
6
+ required: true;
7
+ };
8
+ affixNum: {
9
+ type: __PropType<number>;
10
+ required: true;
11
+ };
12
+ contextMenuStyle: {
13
+ type: __PropType<Record<string, Numberish> | undefined>;
14
+ required: false;
15
+ };
16
+ }, {
17
+ handleContext: (e: MouseEvent) => void;
18
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
19
+ tabItem: {
20
+ type: __PropType<RouteLocationNormalized>;
21
+ required: true;
22
+ };
23
+ affixNum: {
24
+ type: __PropType<number>;
25
+ required: true;
26
+ };
27
+ contextMenuStyle: {
28
+ type: __PropType<Record<string, Numberish> | undefined>;
29
+ required: false;
30
+ };
31
+ }>>, {}>;
32
+ export default _sfc_main;
@@ -0,0 +1,5 @@
1
+ import f from "./tab-content.vue2.mjs";
2
+ export {
3
+ f as default
4
+ };
5
+ //# sourceMappingURL=tab-content.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-content.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,49 @@
1
+ import { defineComponent as u, computed as p, openBlock as c, createElementBlock as s, unref as m, withModifiers as f, toDisplayString as x } from "vue";
2
+ import "@vft/utils";
3
+ import "@vft/use";
4
+ import "../divider/index.mjs";
5
+ import "../icon/index.mjs";
6
+ import "../avatar/index.mjs";
7
+ import "../empty/index.mjs";
8
+ import "../result/index.mjs";
9
+ import "../exception/index.mjs";
10
+ import "../tabs/index.mjs";
11
+ import "../popper/index.mjs";
12
+ import "../collapse-transition/index.mjs";
13
+ import "../tooltip/index.mjs";
14
+ import "../popover/index.mjs";
15
+ import "../menu/index.mjs";
16
+ import "./index.mjs";
17
+ import { useContextMenu as b } from "../context-menu/useContextMenu.mjs";
18
+ import { useTabDropdown as d } from "./use/use-tab-dropdown.mjs";
19
+ import "vue-router";
20
+ import "@vft/store";
21
+ const C = ["title", "onContextmenu"], H = /* @__PURE__ */ u({
22
+ __name: "tab-content",
23
+ props: {
24
+ tabItem: null,
25
+ affixNum: null,
26
+ contextMenuStyle: null
27
+ },
28
+ setup(t, { expose: i }) {
29
+ const [r] = b(), o = p(() => t.tabItem.meta && t.tabItem.meta.title), { getDropMenuList: a, handleContextMenu: l } = d(t.tabItem, t.affixNum);
30
+ function n(e) {
31
+ l(t.tabItem)(e), r({
32
+ event: e,
33
+ styles: t.contextMenuStyle,
34
+ items: a.value
35
+ });
36
+ }
37
+ return i({
38
+ handleContext: n
39
+ }), (e, M) => (c(), s("span", {
40
+ title: m(o),
41
+ class: "vri-multiple-tabs__title",
42
+ onContextmenu: f(n, ["stop"])
43
+ }, x(m(o)), 41, C));
44
+ }
45
+ });
46
+ export {
47
+ H as default
48
+ };
49
+ //# sourceMappingURL=tab-content.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-content.vue2.mjs","sources":["../../../../../packages/components/multiple-tabs/tab-content.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { type RouteLocationNormalized } from 'vue-router';\nimport { useContextMenu } from '@vft-ui/components/context-menu';\nimport type { TabContentExpose } from './types';\nimport { useTabDropdown } from './use';\n\ninterface Props {\n tabItem: RouteLocationNormalized;\n affixNum: number;\n contextMenuStyle?: Record<string, Numberish>;\n}\n\ndefineProps({\n \"tabItem\": null,\n \"affixNum\": null,\n \"contextMenuStyle\": null\n})\n\nconst [createContextMenu] = useContextMenu();\n\nconst getTitle = computed(() => {\n return __props.tabItem.meta && (__props.tabItem.meta.title as string);\n});\n\nconst { getDropMenuList, handleContextMenu } = useTabDropdown(__props.tabItem, __props.affixNum);\n\nfunction handleContext(e: MouseEvent) {\n handleContextMenu(__props.tabItem)(e);\n createContextMenu({\n event: e,\n styles: __props.contextMenuStyle,\n items: getDropMenuList.value\n });\n}\n\ndefineExpose<TabContentExpose>({\n handleContext\n});\n</script>\n\n<template>\n <span :title=\"getTitle\" class=\"vri-multiple-tabs__title\" @contextmenu.stop=\"handleContext\">{{ getTitle }}</span>\n</template>\n"],"names":["createContextMenu","useContextMenu","getTitle","computed","__props","getDropMenuList","handleContextMenu","useTabDropdown","handleContext","expose"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBM,UAAA,CAACA,CAAiB,IAAIC,KAEtBC,IAAWC,EAAS,MACjBC,EAAQ,QAAQ,QAASA,EAAQ,QAAQ,KAAK,KACtD,GAEK,EAAE,iBAAAC,GAAiB,mBAAAC,MAAsBC,EAAeH,EAAQ,SAASA,EAAQ,QAAQ;AAE/F,aAASI,EAAc,GAAe;AAClB,MAAAF,EAAAF,EAAQ,OAAO,EAAE,CAAC,GAClBJ,EAAA;AAAA,QAChB,OAAO;AAAA,QACP,QAAQI,EAAQ;AAAA,QAChB,OAAOC,EAAgB;AAAA,MAAA,CACxB;AAAA,IACH;AAE+B,WAAAI,EAAA;AAAA,MAC7B,eAAAD;AAAA,IAAA,CACD;;;;;;;"}
@@ -0,0 +1,3 @@
1
+ export type TabContentExpose = {
2
+ handleContext: (e: MouseEvent) => void;
3
+ };
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './use-tab-dropdown';
2
+ export * from './use-multiple-tabs';
@@ -0,0 +1,8 @@
1
+ import { useTabDropdown as a } from "./use-tab-dropdown.mjs";
2
+ import { initAffixTabs as f, useTabsDrag as s } from "./use-multiple-tabs.mjs";
3
+ export {
4
+ f as initAffixTabs,
5
+ a as useTabDropdown,
6
+ s as useTabsDrag
7
+ };
8
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @description 初始化需要固定的 tab 标签
3
+ * @author wfd
4
+ * @date 2022/10/15 19:03
5
+ * @example
6
+ * @returns {string[]}
7
+ */
8
+ export declare function initAffixTabs(): string[];
9
+ export declare function useTabsDrag(affixTextList: string[]): void;