vue-stack-tabs 1.1.0 → 1.3.1
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/README.en.md +526 -0
- package/README.md +141 -39
- package/README.ru.md +526 -0
- package/dist/iframe-bridge.d.ts +8 -0
- package/dist/iframe-bridge.html +77 -0
- package/dist/iframe-bridge.mjs +20 -0
- package/dist/iframe-child.html +19 -6
- package/dist/nuxt/favicon.svg +10 -0
- package/dist/nuxt/iframe-bridge.html +77 -0
- package/dist/nuxt/iframe-child.html +88 -0
- package/dist/nuxt/module.d.ts +6 -0
- package/dist/nuxt/module.mjs +28 -0
- package/dist/nuxt/plugin.mjs +9 -0
- package/dist/nuxt/runtime/plugin.d.ts +2 -0
- package/dist/nuxt/runtime/plugin.mjs +9 -0
- package/dist/src/lib/StackTabs.vue.d.ts +30 -16
- package/dist/src/lib/components/ContextMenu/ContextMenuItem.vue.d.ts +7 -1
- package/dist/src/lib/components/ContextMenu/index.vue.d.ts +5 -4
- package/dist/src/lib/components/PageLoading.vue.d.ts +2 -1
- package/dist/src/lib/components/StackKeepAlive/StackCacheRenderer.vue.d.ts +25 -0
- package/dist/src/lib/components/StackKeepAlive/StackKeepAlive.vue.d.ts +12 -0
- package/dist/src/lib/components/TabHeader/TabHeaderButton.vue.d.ts +11 -12
- package/dist/src/lib/components/TabHeader/TabHeaderItem.vue.d.ts +5 -4
- package/dist/src/lib/components/TabHeader/TabHeaderScroll.vue.d.ts +8 -22
- package/dist/src/lib/components/TabHeader/index.vue.d.ts +11 -164
- package/dist/src/lib/hooks/stackTabsContext.d.ts +49 -0
- package/dist/src/lib/hooks/tabPanel/evict.d.ts +21 -61
- package/dist/src/lib/hooks/tabPanel/navigationTransaction.d.ts +35 -0
- package/dist/src/lib/hooks/tabPanel/refresh.d.ts +17 -0
- package/dist/src/lib/hooks/tabPanel/scroll.d.ts +8 -8
- package/dist/src/lib/hooks/tabPanel/session.d.ts +9 -8
- package/dist/src/lib/hooks/tabPanel/state.d.ts +20 -72
- package/dist/src/lib/hooks/useIframeManager.d.ts +35 -0
- package/dist/src/lib/hooks/useTabActions.d.ts +5 -46
- package/dist/src/lib/hooks/useTabEventBus.d.ts +22 -9
- package/dist/src/lib/hooks/useTabPanel.d.ts +14 -73
- package/dist/src/lib/i18n/index.d.ts +6 -4
- package/dist/src/lib/i18n/lang/en.d.ts +5 -0
- package/dist/src/lib/i18n/lang/zh-CN.d.ts +5 -0
- package/dist/src/lib/i18n/stackTabsLocale.d.ts +2 -0
- package/dist/src/lib/iframe-bridge.d.ts +8 -0
- package/dist/src/lib/iframe.vue.d.ts +2 -1
- package/dist/src/lib/index.d.ts +4 -5
- package/dist/src/lib/model/TabModel.d.ts +11 -40
- package/dist/src/lib/nuxt/module.d.ts +6 -0
- package/dist/src/lib/nuxt/runtime/plugin.client.d.ts +2 -0
- package/dist/src/lib/nuxt/runtime/plugin.d.ts +2 -0
- package/dist/src/lib/utils/iframeBridge.d.ts +11 -3
- package/dist/src/lib/utils/stackTabsA11y.d.ts +8 -0
- package/dist/src/lib/utils/stackTabsMessage.d.ts +7 -0
- package/dist/src/lib/utils/tabInfoEncoder.d.ts +0 -15
- package/dist/src/lib/utils/typeGuards.d.ts +2 -0
- package/dist/src/lib/utils/urlParser.d.ts +24 -3
- package/dist/src/lib/versionLogger.d.ts +1 -0
- package/dist/style.css +2 -1
- package/dist/utils/iframeBridge.d.ts +39 -0
- package/dist/vue-stack-tabs.css +2 -1
- package/dist/vue-stack-tabs.es.js +1 -2220
- package/package.json +71 -50
- package/src/lib/StackTabs.vue +223 -196
- package/src/lib/assets/style/stackTab.scss +110 -13
- package/src/lib/components/ContextMenu/ContextMenuItem.vue +23 -11
- package/src/lib/components/ContextMenu/index.vue +94 -10
- package/src/lib/components/PageLoading.vue +9 -7
- package/src/lib/components/StackKeepAlive/StackCacheRenderer.vue +70 -0
- package/src/lib/components/StackKeepAlive/StackKeepAlive.vue +57 -0
- package/src/lib/components/TabHeader/TabHeaderButton.vue +19 -8
- package/src/lib/components/TabHeader/TabHeaderItem.vue +74 -17
- package/src/lib/components/TabHeader/TabHeaderScroll.vue +47 -25
- package/src/lib/components/TabHeader/index.vue +181 -13
- package/src/lib/hooks/stackTabsContext.ts +135 -0
- package/src/lib/hooks/tabPanel/evict.ts +122 -87
- package/src/lib/hooks/tabPanel/navigationTransaction.ts +61 -0
- package/src/lib/hooks/tabPanel/refresh.ts +109 -0
- package/src/lib/hooks/tabPanel/scroll.ts +57 -40
- package/src/lib/hooks/tabPanel/session.ts +84 -22
- package/src/lib/hooks/tabPanel/state.ts +41 -44
- package/src/lib/hooks/useIframeManager.ts +253 -0
- package/src/lib/hooks/useTabActions.ts +64 -30
- package/src/lib/hooks/useTabEventBus.ts +29 -19
- package/src/lib/hooks/useTabLoading.ts +3 -2
- package/src/lib/hooks/useTabPanel.tsx +290 -313
- package/src/lib/hooks/useTabRouter.ts +111 -97
- package/src/lib/i18n/index.ts +53 -45
- package/src/lib/i18n/lang/en.ts +6 -1
- package/src/lib/i18n/lang/zh-CN.ts +6 -1
- package/src/lib/i18n/stackTabsLocale.ts +8 -0
- package/src/lib/iframe-bridge.ts +12 -0
- package/src/lib/index.ts +14 -19
- package/src/lib/model/TabModel.ts +27 -82
- package/src/lib/nuxt/module.d.ts +4 -0
- package/src/lib/nuxt/module.ts +8 -3
- package/src/lib/nuxt/runtime/plugin.client.ts +1 -0
- package/src/lib/nuxt/runtime/plugin.ts +11 -0
- package/src/lib/utils/iframeBridge.ts +29 -5
- package/src/lib/utils/scrollUtils.ts +9 -4
- package/src/lib/utils/stackTabsA11y.ts +12 -0
- package/src/lib/utils/stackTabsMessage.ts +99 -0
- package/src/lib/utils/tabInfoEncoder.ts +70 -21
- package/src/lib/utils/typeGuards.ts +3 -0
- package/src/lib/utils/urlParser.ts +144 -14
- package/src/lib/versionLogger.ts +7 -19
- package/dist/src/lib/hooks/tabPanel/evict.spec.d.ts +0 -1
- package/dist/src/lib/hooks/useTabPanel.spec.d.ts +0 -1
- package/dist/src/lib/model/TabModel.spec.d.ts +0 -1
- package/dist/src/lib/utils/iframeBridge.spec.d.ts +0 -1
- package/dist/src/lib/utils/tabInfoEncoder.spec.d.ts +0 -1
- package/dist/src/lib/utils/urlParser.spec.d.ts +0 -1
- package/dist/vue-stack-tabs.umd.js +0 -1
- package/src/lib/hooks/tabPanel/evict.spec.ts +0 -85
- package/src/lib/hooks/useTabPanel.spec.ts +0 -34
- package/src/lib/model/TabModel.spec.ts +0 -40
- package/src/lib/utils/iframeBridge.spec.ts +0 -37
- package/src/lib/utils/tabInfoEncoder.spec.ts +0 -32
- package/src/lib/utils/urlParser.spec.ts +0 -45
|
@@ -1,31 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 标签事件总线。
|
|
3
|
+
*
|
|
4
|
+
* 基于 mitt 实现组件间事件通信,用于 tab 激活、页面 loading、
|
|
5
|
+
* 栈内导航(forward/backward)、iframe 刷新等事件的发布/订阅。
|
|
6
|
+
*/
|
|
7
|
+
import type { InjectionKey } from 'vue'
|
|
8
|
+
import { hasInjectionContext, inject } from 'vue'
|
|
1
9
|
import type { Emitter, EventType } from 'mitt'
|
|
2
|
-
import
|
|
3
|
-
import { type App, inject } from 'vue'
|
|
10
|
+
import { resolveStackTabsRuntimeContext } from './stackTabsContext'
|
|
4
11
|
|
|
5
12
|
declare module '@vue/runtime-core' {
|
|
6
13
|
export interface ComponentCustomProperties {
|
|
7
|
-
$layerEmitter: Emitter<
|
|
14
|
+
$layerEmitter: Emitter<TabEventPayloadMap>
|
|
8
15
|
}
|
|
9
16
|
}
|
|
10
17
|
|
|
11
|
-
/** 全局标签事件总线,用于跨组件通信(激活、加载等) */
|
|
12
|
-
const eventBus = mitt<Record<EventType, unknown>>()
|
|
13
|
-
|
|
14
|
-
const plugin = {
|
|
15
|
-
install(app: App) {
|
|
16
|
-
app.provide('tabEmitter', eventBus)
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** 获取标签事件总线,用于组件间通信 */
|
|
21
|
-
export const useTabEmitter = <T extends Record<EventType, unknown>>(): Emitter<T> => {
|
|
22
|
-
return inject('tabEmitter')!
|
|
23
|
-
}
|
|
24
|
-
|
|
25
18
|
/** 标签相关事件类型 */
|
|
26
19
|
export enum TabEventType {
|
|
27
20
|
PAGE_LOADING = 'PAGE_LOADING',
|
|
28
|
-
TAB_ACTIVE = 'TAB_ACTIVE'
|
|
21
|
+
TAB_ACTIVE = 'TAB_ACTIVE',
|
|
22
|
+
FORWARD = 'FORWARD',
|
|
23
|
+
BACKWARD = 'BACKWARD',
|
|
24
|
+
REFRESH_IFRAME_POSTMESSAGE = 'REFRESH_IFRAME_POSTMESSAGE'
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface TabEventPayloadMap extends Record<EventType, unknown> {
|
|
28
|
+
[TabEventType.PAGE_LOADING]: { tId: string; value: boolean }
|
|
29
|
+
[TabEventType.TAB_ACTIVE]: { id: string; isRoute?: boolean }
|
|
30
|
+
[TabEventType.FORWARD]: void
|
|
31
|
+
[TabEventType.BACKWARD]: void
|
|
32
|
+
[TabEventType.REFRESH_IFRAME_POSTMESSAGE]: string
|
|
29
33
|
}
|
|
30
34
|
|
|
31
|
-
export
|
|
35
|
+
export const tabEmitterKey: InjectionKey<Emitter<TabEventPayloadMap>> = Symbol('tabEmitter')
|
|
36
|
+
|
|
37
|
+
/** 获取标签事件总线,用于组件间通信 */
|
|
38
|
+
export const useTabEmitter = (): Emitter<TabEventPayloadMap> => {
|
|
39
|
+
const injected = hasInjectionContext() ? inject(tabEmitterKey, null) : null
|
|
40
|
+
return injected ?? resolveStackTabsRuntimeContext().eventBus
|
|
41
|
+
}
|
|
@@ -10,17 +10,18 @@ import { TabEventType, useTabEmitter } from '../hooks/useTabEventBus'
|
|
|
10
10
|
export default () => {
|
|
11
11
|
const emitter = useTabEmitter()
|
|
12
12
|
const { attrs } = getCurrentInstance() as ComponentInternalInstance
|
|
13
|
+
const getTabId = () => String(attrs.tId ?? '')
|
|
13
14
|
onUnmounted(() => {
|
|
14
15
|
closeTabLoading()
|
|
15
16
|
})
|
|
16
17
|
/** 显示加载遮罩 */
|
|
17
18
|
const openTabLoading = () => {
|
|
18
|
-
emitter.emit(TabEventType.PAGE_LOADING, { tId:
|
|
19
|
+
emitter.emit(TabEventType.PAGE_LOADING, { tId: getTabId(), value: true })
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
/** 隐藏加载遮罩 */
|
|
22
23
|
const closeTabLoading = () => {
|
|
23
|
-
emitter.emit(TabEventType.PAGE_LOADING, { tId:
|
|
24
|
+
emitter.emit(TabEventType.PAGE_LOADING, { tId: getTabId(), value: false })
|
|
24
25
|
}
|
|
25
26
|
return { openTabLoading, closeTabLoading }
|
|
26
27
|
}
|