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.
- package/es/component.mjs +8 -6
- package/es/component.mjs.map +1 -1
- package/es/components/back-top/back-top.vue2.mjs +8 -6
- package/es/components/back-top/back-top.vue2.mjs.map +1 -1
- package/es/components/context-menu/context-menu.vue.d.ts +39 -0
- package/es/components/context-menu/context-menu.vue.mjs +5 -0
- package/es/components/context-menu/context-menu.vue.mjs.map +1 -0
- package/es/components/context-menu/context-menu.vue2.mjs +93 -0
- package/es/components/context-menu/context-menu.vue2.mjs.map +1 -0
- package/es/components/context-menu/createContextMenu.d.ts +3 -0
- package/es/components/context-menu/createContextMenu.mjs +41 -0
- package/es/components/context-menu/createContextMenu.mjs.map +1 -0
- package/es/components/context-menu/index.d.ts +3 -0
- package/es/components/context-menu/index.mjs +8 -0
- package/es/components/context-menu/index.mjs.map +1 -0
- package/es/components/context-menu/style/css.d.ts +0 -0
- package/es/components/context-menu/style/css.mjs +3 -0
- package/es/components/context-menu/style/css.mjs.map +1 -0
- package/es/components/context-menu/style/index.d.ts +0 -0
- package/es/components/context-menu/style/index.mjs +3 -0
- package/es/components/context-menu/style/index.mjs.map +1 -0
- package/es/components/context-menu/types.d.ts +23 -0
- package/es/components/context-menu/types.mjs +2 -0
- package/es/components/context-menu/types.mjs.map +1 -0
- package/es/components/context-menu/useContextMenu.d.ts +3 -0
- package/es/components/context-menu/useContextMenu.mjs +11 -0
- package/es/components/context-menu/useContextMenu.mjs.map +1 -0
- package/es/components/index.d.ts +2 -0
- package/es/components/index.mjs +44 -32
- package/es/components/index.mjs.map +1 -1
- package/es/components/menu/menu-item.vue2.mjs +12 -10
- package/es/components/menu/menu-item.vue2.mjs.map +1 -1
- package/es/components/menu/sub-menu.vue2.mjs +5 -3
- package/es/components/menu/sub-menu.vue2.mjs.map +1 -1
- package/es/components/multiple-tabs/index.d.ts +30 -0
- package/es/components/multiple-tabs/index.mjs +16 -0
- package/es/components/multiple-tabs/index.mjs.map +1 -0
- package/es/components/multiple-tabs/multiple-tabs.vue.d.ts +29 -0
- package/es/components/multiple-tabs/multiple-tabs.vue.mjs +5 -0
- package/es/components/multiple-tabs/multiple-tabs.vue.mjs.map +1 -0
- package/es/components/multiple-tabs/multiple-tabs.vue2.mjs +152 -0
- package/es/components/multiple-tabs/multiple-tabs.vue2.mjs.map +1 -0
- package/es/components/multiple-tabs/style/css.d.ts +0 -0
- package/es/components/multiple-tabs/style/css.mjs +3 -0
- package/es/components/multiple-tabs/style/css.mjs.map +1 -0
- package/es/components/multiple-tabs/style/index.d.ts +0 -0
- package/es/components/multiple-tabs/style/index.mjs +3 -0
- package/es/components/multiple-tabs/style/index.mjs.map +1 -0
- package/es/components/multiple-tabs/tab-content.vue.d.ts +32 -0
- package/es/components/multiple-tabs/tab-content.vue.mjs +5 -0
- package/es/components/multiple-tabs/tab-content.vue.mjs.map +1 -0
- package/es/components/multiple-tabs/tab-content.vue2.mjs +49 -0
- package/es/components/multiple-tabs/tab-content.vue2.mjs.map +1 -0
- package/es/components/multiple-tabs/types.d.ts +3 -0
- package/es/components/multiple-tabs/types.mjs +2 -0
- package/es/components/multiple-tabs/types.mjs.map +1 -0
- package/es/components/multiple-tabs/use/index.d.ts +2 -0
- package/es/components/multiple-tabs/use/index.mjs +8 -0
- package/es/components/multiple-tabs/use/index.mjs.map +1 -0
- package/es/components/multiple-tabs/use/use-multiple-tabs.d.ts +9 -0
- package/es/components/multiple-tabs/use/use-multiple-tabs.mjs +54 -0
- package/es/components/multiple-tabs/use/use-multiple-tabs.mjs.map +1 -0
- package/es/components/multiple-tabs/use/use-tab-dropdown.d.ts +6 -0
- package/es/components/multiple-tabs/use/use-tab-dropdown.mjs +71 -0
- package/es/components/multiple-tabs/use/use-tab-dropdown.mjs.map +1 -0
- package/es/components/result/result.vue2.mjs +15 -13
- package/es/components/result/result.vue2.mjs.map +1 -1
- package/es/components/tabs/tab-nav.vue2.mjs +5 -3
- package/es/components/tabs/tab-nav.vue2.mjs.map +1 -1
- package/es/index.mjs +90 -78
- package/es/index.mjs.map +1 -1
- package/es/package.json.mjs +1 -1
- package/es/style.css +1 -1
- package/es/theme-style/src/multiple-tabs.scss.mjs +5 -0
- package/es/theme-style/src/multiple-tabs.scss.mjs.map +1 -0
- package/lib/component.js +1 -1
- package/lib/component.js.map +1 -1
- package/lib/components/back-top/back-top.vue2.js +1 -1
- package/lib/components/back-top/back-top.vue2.js.map +1 -1
- package/lib/components/context-menu/context-menu.vue.d.ts +39 -0
- package/lib/components/context-menu/context-menu.vue.js +2 -0
- package/lib/components/context-menu/context-menu.vue.js.map +1 -0
- package/lib/components/context-menu/context-menu.vue2.js +2 -0
- package/lib/components/context-menu/context-menu.vue2.js.map +1 -0
- package/lib/components/context-menu/createContextMenu.d.ts +3 -0
- package/lib/components/context-menu/createContextMenu.js +2 -0
- package/lib/components/context-menu/createContextMenu.js.map +1 -0
- package/lib/components/context-menu/index.d.ts +3 -0
- package/lib/components/context-menu/index.js +2 -0
- package/lib/components/context-menu/index.js.map +1 -0
- package/lib/components/context-menu/style/css.d.ts +0 -0
- package/lib/components/context-menu/style/css.js +2 -0
- package/lib/components/context-menu/style/css.js.map +1 -0
- package/lib/components/context-menu/style/index.d.ts +0 -0
- package/lib/components/context-menu/style/index.js +2 -0
- package/lib/components/context-menu/style/index.js.map +1 -0
- package/lib/components/context-menu/types.d.ts +23 -0
- package/lib/components/context-menu/types.js +2 -0
- package/lib/components/context-menu/types.js.map +1 -0
- package/lib/components/context-menu/useContextMenu.d.ts +3 -0
- package/lib/components/context-menu/useContextMenu.js +2 -0
- package/lib/components/context-menu/useContextMenu.js.map +1 -0
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +1 -1
- package/lib/components/menu/menu-item.vue2.js +1 -1
- package/lib/components/menu/menu-item.vue2.js.map +1 -1
- package/lib/components/menu/sub-menu.vue2.js +1 -1
- package/lib/components/menu/sub-menu.vue2.js.map +1 -1
- package/lib/components/multiple-tabs/index.d.ts +30 -0
- package/lib/components/multiple-tabs/index.js +2 -0
- package/lib/components/multiple-tabs/index.js.map +1 -0
- package/lib/components/multiple-tabs/multiple-tabs.vue.d.ts +29 -0
- package/lib/components/multiple-tabs/multiple-tabs.vue.js +2 -0
- package/lib/components/multiple-tabs/multiple-tabs.vue.js.map +1 -0
- package/lib/components/multiple-tabs/multiple-tabs.vue2.js +2 -0
- package/lib/components/multiple-tabs/multiple-tabs.vue2.js.map +1 -0
- package/lib/components/multiple-tabs/style/css.d.ts +0 -0
- package/lib/components/multiple-tabs/style/css.js +2 -0
- package/lib/components/multiple-tabs/style/css.js.map +1 -0
- package/lib/components/multiple-tabs/style/index.d.ts +0 -0
- package/lib/components/multiple-tabs/style/index.js +2 -0
- package/lib/components/multiple-tabs/style/index.js.map +1 -0
- package/lib/components/multiple-tabs/tab-content.vue.d.ts +32 -0
- package/lib/components/multiple-tabs/tab-content.vue.js +2 -0
- package/lib/components/multiple-tabs/tab-content.vue.js.map +1 -0
- package/lib/components/multiple-tabs/tab-content.vue2.js +2 -0
- package/lib/components/multiple-tabs/tab-content.vue2.js.map +1 -0
- package/lib/components/multiple-tabs/types.d.ts +3 -0
- package/lib/components/multiple-tabs/types.js +2 -0
- package/lib/components/multiple-tabs/types.js.map +1 -0
- package/lib/components/multiple-tabs/use/index.d.ts +2 -0
- package/lib/components/multiple-tabs/use/index.js +2 -0
- package/lib/components/multiple-tabs/use/index.js.map +1 -0
- package/lib/components/multiple-tabs/use/use-multiple-tabs.d.ts +9 -0
- package/lib/components/multiple-tabs/use/use-multiple-tabs.js +2 -0
- package/lib/components/multiple-tabs/use/use-multiple-tabs.js.map +1 -0
- package/lib/components/multiple-tabs/use/use-tab-dropdown.d.ts +6 -0
- package/lib/components/multiple-tabs/use/use-tab-dropdown.js +2 -0
- package/lib/components/multiple-tabs/use/use-tab-dropdown.js.map +1 -0
- package/lib/components/result/result.vue2.js +1 -1
- package/lib/components/result/result.vue2.js.map +1 -1
- package/lib/components/tabs/tab-nav.vue2.js +1 -1
- package/lib/components/tabs/tab-nav.vue2.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/package.json.js +1 -1
- package/lib/theme-style/src/multiple-tabs.scss.js +2 -0
- package/lib/theme-style/src/multiple-tabs.scss.js.map +1 -0
- package/package.json +4 -2
- package/theme-style/src/context-menu.css +0 -0
- package/theme-style/src/multiple-tabs.scss +19 -0
- 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
|
-
}),
|
|
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
|
-
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
File without changes
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|