vue-stack-tabs 2.2.0 → 2.3.0

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 (42) hide show
  1. package/dist/StackTabs.vue.d.ts +2 -2
  2. package/dist/components/StackKeepAlive/StackCacheRenderer.vue.d.ts +0 -2
  3. package/dist/hooks/stackTabsContext.d.ts +0 -1
  4. package/dist/hooks/tabPanel/evict.d.ts +2 -2
  5. package/dist/hooks/tabPanel/scroll.d.ts +0 -2
  6. package/dist/hooks/tabPanel/state.d.ts +0 -1
  7. package/dist/hooks/useIframeManager.d.ts +1 -1
  8. package/dist/hooks/useScrollShadow.d.ts +11 -2
  9. package/dist/hooks/useTabEventBus.d.ts +5 -0
  10. package/dist/model/TabModel.d.ts +12 -5
  11. package/dist/nuxt/module.mjs +1 -1
  12. package/dist/nuxt/runtime/plugin.mjs +8 -1598
  13. package/dist/style.css +1 -1
  14. package/dist/utils/scrollUtils.d.ts +0 -2
  15. package/dist/utils/tabInfoEncoder.d.ts +0 -2
  16. package/dist/utils/urlParser.d.ts +6 -7
  17. package/dist/vue-stack-tabs.es.js +1 -1
  18. package/package.json +1 -1
  19. package/src/lib/StackTabs.vue +16 -1
  20. package/src/lib/assets/style/stack-tab.scss +12 -6
  21. package/src/lib/components/PageLoading.vue +10 -9
  22. package/src/lib/components/StackKeepAlive/StackCacheRenderer.vue +1 -5
  23. package/src/lib/components/TabHeader/TabHeaderScroll.vue +164 -90
  24. package/src/lib/components/TabHeader/index.vue +51 -10
  25. package/src/lib/hooks/stackTabsContext.ts +0 -1
  26. package/src/lib/hooks/tabPanel/evict.ts +14 -6
  27. package/src/lib/hooks/tabPanel/pageComponentFactory.tsx +211 -42
  28. package/src/lib/hooks/tabPanel/scroll.ts +4 -15
  29. package/src/lib/hooks/tabPanel/session.ts +11 -4
  30. package/src/lib/hooks/tabPanel/state.ts +0 -2
  31. package/src/lib/hooks/tabPanel/tabStore.ts +28 -10
  32. package/src/lib/hooks/useIframeManager.ts +11 -15
  33. package/src/lib/hooks/useScrollShadow.ts +74 -19
  34. package/src/lib/hooks/useTabActions.ts +10 -4
  35. package/src/lib/hooks/useTabEventBus.ts +3 -0
  36. package/src/lib/hooks/useTabPanel.tsx +46 -34
  37. package/src/lib/model/TabModel.ts +14 -5
  38. package/src/lib/nuxt/module.ts +3 -1
  39. package/src/lib/nuxt/runtime/plugin.ts +7 -3
  40. package/src/lib/utils/scrollUtils.ts +0 -18
  41. package/src/lib/utils/tabInfoEncoder.ts +21 -2
  42. package/src/lib/utils/urlParser.ts +40 -37
@@ -47,13 +47,13 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {},
47
47
  onOnPageLoaded?: ((...args: any[]) => any) | undefined;
48
48
  }>, {
49
49
  contextmenu: boolean | object;
50
- defaultTabs: ITabData[];
51
50
  max: number;
52
51
  space: number;
53
- width: string;
54
52
  tabScrollMode: TabScrollMode;
55
53
  tabTransition: string | TransitionProps;
54
+ width: string;
56
55
  iframeLoadTimeout: number;
56
+ defaultTabs: ITabData[];
57
57
  homeTab: ITabData;
58
58
  pageTransition: string;
59
59
  pageTransitionBack: string;
@@ -7,8 +7,6 @@ interface StackCacheRendererProps {
7
7
  interface StackCacheRendererSlotProps {
8
8
  wrappedComponent: DefineComponent;
9
9
  activeCacheKey: string;
10
- refreshKey: number;
11
- activePageRefreshVersion: number;
12
10
  component?: VNode | null;
13
11
  }
14
12
  type __VLS_Slots = {
@@ -7,7 +7,6 @@ export declare const STACK_TABS_CONTEXT_UNAVAILABLE_MESSAGE = "VueStackTabs runt
7
7
  export declare const STACK_TABS_DUPLICATE_INSTANCE_MESSAGE = "VueStackTabs only supports one <VueStackTabs> instance per Vue app.";
8
8
  export interface StackTabsRuntimeContext {
9
9
  tabs: Ref<ITabItem[]>;
10
- defaultTabs: Ref<ITabItem[]>;
11
10
  caches: ShallowRef<string[]>;
12
11
  components: Map<string, DefineComponent>;
13
12
  cacheIdsToEvict: Set<string>;
@@ -5,12 +5,12 @@ export interface TabPanelEvictionApi {
5
5
  markTabPagesForEviction: (tab: {
6
6
  id: string;
7
7
  pages: {
8
- list(): ITabPage[];
8
+ readonlyList(): readonly ITabPage[];
9
9
  };
10
10
  }) => void;
11
11
  markTabPagesForEvictionOnly: (tab: {
12
12
  pages: {
13
- list(): ITabPage[];
13
+ readonlyList(): readonly ITabPage[];
14
14
  };
15
15
  }) => void;
16
16
  addCache: (cacheName: string) => void;
@@ -4,7 +4,5 @@ export interface TabPanelScrollApi {
4
4
  saveScroller: (pageCacheId: string) => void;
5
5
  removeScroller: (pageCacheId: string) => void;
6
6
  addPageScroller: (pageCacheId: string, ...selectorIds: string[]) => void;
7
- /** 主动失效某页面的滚动元素缓存,例如外部强制刷新缓存页时 */
8
- invalidateAutoScrollCache: (pageCacheId: string) => void;
9
7
  }
10
8
  export declare const createTabPanelScroll: (context: StackTabsRuntimeContext) => TabPanelScrollApi;
@@ -6,7 +6,6 @@ export interface ScrollPosition {
6
6
  }
7
7
  export interface TabPanelRuntimeState {
8
8
  tabs: Ref<ITabItem[]>;
9
- defaultTabs: Ref<ITabItem[]>;
10
9
  caches: ShallowRef<string[]>;
11
10
  components: Map<string, DefineComponent>;
12
11
  cacheIdsToEvict: Set<string>;
@@ -8,7 +8,7 @@ interface IframeLoadState {
8
8
  export interface UseIframeManagerOptions {
9
9
  tabs: Ref<ITabItem[]>;
10
10
  iframeRefreshKeys: Ref<Record<string, number>>;
11
- iframeLoadTimeout: number;
11
+ iframeLoadTimeout: Ref<number>;
12
12
  t: (key: string) => string;
13
13
  }
14
14
  export declare function useIframeManager(options: UseIframeManagerOptions): {
@@ -1,7 +1,14 @@
1
1
  import { Ref } from 'vue';
2
2
  export interface UseScrollShadowOptions {
3
- /** 容器元素的 ref,可以是 Ref<HTMLElement | null> 或 getter 函数 */
3
+ /** 滚动容器:用于监听 scroll / resize 并读取滚动尺寸 */
4
4
  target: Ref<HTMLElement | null> | (() => HTMLElement | null);
5
+ /**
6
+ * 阴影类挂载目标,默认与 target 相同。
7
+ * 当 target 参与 transform 动画(如刷新转场)时,应传入不参与动画的祖先
8
+ * (例如 .stack-tab__keep-alive-panel),否则 ::after 的绝对定位包含块会变化,
9
+ * 阴影会随动画错位或消失。
10
+ */
11
+ classTarget?: Ref<HTMLElement | null> | (() => HTMLElement | null);
5
12
  /**
6
13
  * 是否监听内容缩放/尺寸变化(默认 true)。
7
14
  * 启用后会用 ResizeObserver 监视目标尺寸,容器或子树尺寸变化都会重新计算阴影边界。
@@ -14,7 +21,9 @@ export interface UseScrollShadowOptions {
14
21
  edgeThreshold?: number;
15
22
  }
16
23
  export interface UseScrollShadowReturn {
17
- /** 手动同步一次(用于内容变化/resize 后) */
24
+ /** 重新解析滚动/阴影目标并同步一次(用于 keep-alive 激活、DOM 重新挂载后) */
18
25
  sync: () => void;
26
+ /** 移除阴影类并取消待执行的 rAF(用于 keep-alive 失活) */
27
+ clear: () => void;
19
28
  }
20
29
  export declare const useScrollShadow: (options: UseScrollShadowOptions) => UseScrollShadowReturn;
@@ -10,6 +10,8 @@ declare module '@vue/runtime-core' {
10
10
  export declare enum TabEventType {
11
11
  PAGE_LOADING = "PAGE_LOADING",
12
12
  TAB_ACTIVE = "TAB_ACTIVE",
13
+ /** 请求标签栏将指定标签滚动到可视区域(不改变激活状态) */
14
+ TAB_SCROLL_TO = "TAB_SCROLL_TO",
13
15
  FORWARD = "FORWARD",
14
16
  BACKWARD = "BACKWARD",
15
17
  REFRESH_IFRAME_POSTMESSAGE = "REFRESH_IFRAME_POSTMESSAGE"
@@ -23,6 +25,9 @@ export interface TabEventPayloadMap extends Record<EventType, unknown> {
23
25
  id: string;
24
26
  isRoute?: boolean;
25
27
  };
28
+ [TabEventType.TAB_SCROLL_TO]: {
29
+ id: string;
30
+ };
26
31
  [TabEventType.FORWARD]: void;
27
32
  [TabEventType.BACKWARD]: void;
28
33
  [TabEventType.REFRESH_IFRAME_POSTMESSAGE]: string;
@@ -11,22 +11,29 @@ export declare enum TabScrollMode {
11
11
  BUTTON = "button",
12
12
  BOTH = "both"
13
13
  }
14
- /** 标签栏滚动条拖拽时的临时状态 */
14
+ /**
15
+ * @deprecated 标签栏拖拽内部已不再使用该类型;保留仅为兼容 2.x 的公开类型导出,
16
+ * 将在下一个大版本移除。
17
+ */
15
18
  export interface DragData {
16
19
  thumbLeft: number;
17
20
  startScrollLeft: number;
18
21
  startThumbLeft: number;
19
22
  startPageX: number;
20
23
  }
21
- /** 滚动条滑块计算所需的数据 */
24
+ /**
25
+ * @deprecated 内部滚轮/滚动事件常量已不再使用该类型;保留仅为兼容 2.x 的公开类型导出,
26
+ * 将在下一个大版本移除。
27
+ */
28
+ export type ScrollEvents = {
29
+ ScrollUpdate: void;
30
+ };
31
+ /** 滚动条滑块计算所需的数据(滚动过程中保持非响应式) */
22
32
  export interface ScrollData {
23
33
  clientWidth: number;
24
34
  scrollWidth: number;
25
35
  scrollLeft: number;
26
36
  }
27
- export type ScrollEvents = {
28
- ScrollUpdate: void;
29
- };
30
37
  /** 打开标签时传入的完整数据(含 path、query) */
31
38
  export interface ITabData extends ITabBase {
32
39
  title: string;
@@ -11,7 +11,7 @@ var a = i({
11
11
  a.options.runtimeConfig.public.vueStackTabs = { locale: i.locale }, n({ src: o("./runtime/plugin") }), e({
12
12
  name: "VueStackTabs",
13
13
  export: "VueStackTabs",
14
- filePath: o("../index.ts")
14
+ filePath: o("../vue-stack-tabs.es.js")
15
15
  }), t([
16
16
  {
17
17
  name: "useTabActions",