{"version":3,"sources":["../src/store.ts","../src/utils.ts","../src/hooks.ts"],"sourcesContent":["import { create } from 'zustand';\r\nimport { devtools, persist } from 'zustand/middleware';\r\nimport { TabState, TabActions, TabStore, TabConfig, Tab } from './types';\r\nimport { getFixedTabs, getTabById, getTabIndexById, storage } from './utils';\r\n\r\nconst initialState: TabState = {\r\n  activeTabId: '',\r\n  activeFirstLevelMenuKey: '',\r\n  tabs: [],\r\n  removeCacheKey: null\r\n};\r\n\r\nexport function createTabStore(config: TabConfig = {}) {\r\n  const { cache = false, storageKey = 'globalTabs', homePath = '/home' } = config;\r\n\r\n  return create<TabStore>()(\r\n    devtools(\r\n      persist(\r\n        (set, get) => ({\r\n          ...initialState,\r\n\r\n          addTab: (tab: Tab) => {\r\n            set(\r\n              (state) => {\r\n                const { fixedIndex } = tab;\r\n                let newTabs: Tab[];\r\n\r\n                if (fixedIndex !== undefined && fixedIndex !== null) {\r\n                  newTabs = [...state.tabs];\r\n                  newTabs.splice(fixedIndex, 0, tab);\r\n                } else {\r\n                  newTabs = [...state.tabs, tab];\r\n                }\r\n\r\n                return {\r\n                  ...state,\r\n                  tabs: newTabs\r\n                };\r\n              },\r\n              false,\r\n              'addTab'\r\n            );\r\n          },\r\n\r\n          updateTab: (index: number, tab: Tab) => {\r\n            set(\r\n              (state) => {\r\n                const newTabs = [...state.tabs];\r\n                newTabs[index] = tab;\r\n                return {\r\n                  ...state,\r\n                  tabs: newTabs\r\n                };\r\n              },\r\n              false,\r\n              'updateTab'\r\n            );\r\n          },\r\n\r\n          setActiveTabId: (tabId: string) => {\r\n            set(\r\n              (state) => ({\r\n                ...state,\r\n                activeTabId: tabId\r\n              }),\r\n              false,\r\n              'setActiveTabId'\r\n            );\r\n          },\r\n\r\n          setActiveFirstLevelMenuKey: (key: string) => {\r\n            set(\r\n              (state) => ({\r\n                ...state,\r\n                activeFirstLevelMenuKey: key\r\n              }),\r\n              false,\r\n              'setActiveFirstLevelMenuKey'\r\n            );\r\n          },\r\n\r\n          setTabs: (tabs: Tab[]) => {\r\n            set(\r\n              (state) => ({\r\n                ...state,\r\n                tabs\r\n              }),\r\n              false,\r\n              'setTabs'\r\n            );\r\n          },\r\n\r\n          changeTabLabel: (index: number, label?: string) => {\r\n            set(\r\n              (state) => {\r\n                const newTabs = [...state.tabs];\r\n                if (label) {\r\n                  newTabs[index].i18nKey = label;\r\n                } else {\r\n                  newTabs[index].i18nKey = newTabs[index].oldLabel;\r\n                }\r\n                return {\r\n                  ...state,\r\n                  tabs: newTabs\r\n                };\r\n              },\r\n              false,\r\n              'changeTabLabel'\r\n            );\r\n          },\r\n\r\n          removeTabById: (tabId: string) => {\r\n            set(\r\n              (state) => {\r\n                const tabIndex = getTabIndexById(tabId, state.tabs);\r\n                if (tabIndex === -1) return state;\r\n\r\n                const newTabs = [...state.tabs];\r\n                newTabs.splice(tabIndex, 1);\r\n\r\n                // Handle active tab switching\r\n                let newActiveTabId = state.activeTabId;\r\n                if (state.activeTabId === tabId) {\r\n                  const nextTab = newTabs[tabIndex] || newTabs[tabIndex - 1] || newTabs[newTabs.length - 1];\r\n                  newActiveTabId = nextTab?.id || '';\r\n                }\r\n\r\n                return {\r\n                  ...state,\r\n                  tabs: newTabs,\r\n                  activeTabId: newActiveTabId\r\n                };\r\n              },\r\n              false,\r\n              'removeTabById'\r\n            );\r\n          },\r\n\r\n          clearAllTabs: () => {\r\n            set(\r\n              (state) => {\r\n                const fixedTabs = getFixedTabs(state.tabs);\r\n                const lastFixedTab = fixedTabs[fixedTabs.length - 1];\r\n                \r\n                return {\r\n                  ...state,\r\n                  tabs: fixedTabs,\r\n                  activeTabId: lastFixedTab?.id || ''\r\n                };\r\n              },\r\n              false,\r\n              'clearAllTabs'\r\n            );\r\n          },\r\n\r\n          clearLeftTabs: (tabId: string) => {\r\n            set(\r\n              (state) => {\r\n                const tabIndex = getTabIndexById(tabId, state.tabs);\r\n                if (tabIndex === -1) return state;\r\n\r\n                const fixedTabs = getFixedTabs(state.tabs);\r\n                const fixedTabIds = fixedTabs.map(tab => tab.id);\r\n                \r\n                const newTabs = state.tabs.filter((tab, index) => {\r\n                  if (index < tabIndex) {\r\n                    return fixedTabIds.includes(tab.id);\r\n                  }\r\n                  return true;\r\n                });\r\n\r\n                return {\r\n                  ...state,\r\n                  tabs: newTabs\r\n                };\r\n              },\r\n              false,\r\n              'clearLeftTabs'\r\n            );\r\n          },\r\n\r\n          clearRightTabs: (tabId: string) => {\r\n            set(\r\n              (state) => {\r\n                const tabIndex = getTabIndexById(tabId, state.tabs);\r\n                if (tabIndex === -1) return state;\r\n\r\n                const newTabs = state.tabs.filter((_, index) => index <= tabIndex);\r\n                \r\n                return {\r\n                  ...state,\r\n                  tabs: newTabs\r\n                };\r\n              },\r\n              false,\r\n              'clearRightTabs'\r\n            );\r\n          },\r\n\r\n          clearOtherTabs: (tabId: string) => {\r\n            set(\r\n              (state) => {\r\n                const targetTab = getTabById(tabId, state.tabs);\r\n                if (!targetTab) return state;\r\n\r\n                const fixedTabs = getFixedTabs(state.tabs);\r\n                const newTabs = [...fixedTabs, targetTab];\r\n                \r\n                return {\r\n                  ...state,\r\n                  tabs: newTabs,\r\n                  activeTabId: tabId\r\n                };\r\n              },\r\n              false,\r\n              'clearOtherTabs'\r\n            );\r\n          },\r\n\r\n          setRemoveCacheKey: (keys: string[] | null) => {\r\n            set(\r\n              (state) => ({\r\n                ...state,\r\n                removeCacheKey: keys\r\n              }),\r\n              false,\r\n              'setRemoveCacheKey'\r\n            );\r\n          }\r\n        }),\r\n        {\r\n          name: storageKey,\r\n          storage: {\r\n            getItem: (name) => {\r\n              const value = storage.get(name);\r\n              return {\r\n                state: value,\r\n                version: 0\r\n              };\r\n            },\r\n            setItem: (name, value) => {\r\n              storage.set(name, value.state);\r\n            },\r\n            removeItem: (name) => {\r\n              storage.remove(name);\r\n            }\r\n          }\r\n        }\r\n      ),\r\n      {\r\n        name: 'tab-store'\r\n      }\r\n    )\r\n  );\r\n} ","import { Tab, Route } from './types';\r\n\r\n/**\r\n * Get route icons from route\r\n */\r\nexport function getRouteIcons(route: Route) {\r\n  const { icon, localIcon } = route.handle || {};\r\n\r\n  return { icon, localIcon };\r\n}\r\n\r\n/**\r\n * Get tab by route\r\n */\r\nexport function getTabByRoute(route: Route, homePath = '/home'): Tab {\r\n  const { fullPath, handle, id, pathname } = route;\r\n\r\n  const { fixedIndexInTab, i18nKey, keepAlive = false, title } = handle || {};\r\n\r\n  let fixedIndex = fixedIndexInTab;\r\n\r\n  if (pathname === homePath) {\r\n    fixedIndex = 0;\r\n  }\r\n\r\n  // Get icon and localIcon from getRouteIcons function\r\n  const { icon, localIcon } = getRouteIcons(route);\r\n\r\n  const tab: Tab = {\r\n    fixedIndex,\r\n    fullPath,\r\n    i18nKey,\r\n    icon,\r\n    id: handle?.multiTab ? fullPath : pathname,\r\n    keepAlive,\r\n    label: title || '',\r\n    localIcon,\r\n    newLabel: '',\r\n    oldLabel: i18nKey || title || '',\r\n    routeKey: id,\r\n    routePath: pathname\r\n  };\r\n\r\n  return tab;\r\n}\r\n\r\n/**\r\n * Check if tab is in tabs array\r\n */\r\nexport function isTabInTabs(tabId: string, tabs: Tab[]): boolean {\r\n  return tabs.some(tab => tab.id === tabId);\r\n}\r\n\r\n/**\r\n * Get fixed tabs\r\n */\r\nexport function getFixedTabs(tabs: Tab[]): Tab[] {\r\n  return tabs.filter(tab => tab.fixedIndex !== undefined && tab.fixedIndex !== null);\r\n}\r\n\r\n/**\r\n * Get tab by id\r\n */\r\nexport function getTabById(tabId: string, tabs: Tab[]): Tab | undefined {\r\n  return tabs.find(tab => tab.id === tabId);\r\n}\r\n\r\n/**\r\n * Get tab index by id\r\n */\r\nexport function getTabIndexById(tabId: string, tabs: Tab[]): number {\r\n  return tabs.findIndex(tab => tab.id === tabId);\r\n}\r\n\r\n/**\r\n * Check if tab is retain (fixed)\r\n */\r\nexport function isTabRetain(tabId: string, tabs: Tab[]): boolean {\r\n  const tab = getTabById(tabId, tabs);\r\n  return tab ? (tab.fixedIndex !== undefined && tab.fixedIndex !== null) : false;\r\n}\r\n\r\n/**\r\n * Get active first level menu key from route\r\n */\r\nexport function getActiveFirstLevelMenuKey(route: Route): string {\r\n  const pathSegments = route.pathname.split('/').filter(Boolean);\r\n  return pathSegments.length > 0 ? pathSegments[0] : '';\r\n}\r\n\r\n/**\r\n * Storage utilities\r\n */\r\nexport const storage = {\r\n  get: (key: string): any => {\r\n    try {\r\n      const item = localStorage.getItem(key);\r\n      return item ? JSON.parse(item) : null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  },\r\n  set: (key: string, value: any): void => {\r\n    try {\r\n      localStorage.setItem(key, JSON.stringify(value));\r\n    } catch {\r\n      // Ignore storage errors\r\n    }\r\n  },\r\n  remove: (key: string): void => {\r\n    try {\r\n      localStorage.removeItem(key);\r\n    } catch {\r\n      // Ignore storage errors\r\n    }\r\n  }\r\n}; ","import { useEffect, useRef } from 'react';\r\nimport { TabStore, Route, TabConfig, Tab } from './types';\r\nimport { createTabStore } from './store';\r\nimport { getTabByRoute, isTabInTabs, getActiveFirstLevelMenuKey, storage } from './utils';\r\n\r\n// Global store instance\r\nlet globalTabStore: ReturnType<typeof createTabStore> | null = null;\r\n\r\n/**\r\n * Get or create the global tab store\r\n */\r\nexport function getTabStore(config: TabConfig = {}): ReturnType<typeof createTabStore> {\r\n  if (!globalTabStore) {\r\n    globalTabStore = createTabStore(config);\r\n  }\r\n  return globalTabStore;\r\n}\r\n\r\n/**\r\n * Hook to use tab store\r\n */\r\nexport function useTabStore(config?: TabConfig) {\r\n  return getTabStore(config);\r\n}\r\n\r\n/**\r\n * Hook to get tabs from store\r\n */\r\nexport function useTabs() {\r\n  const store = useTabStore();\r\n  return store((state) => state.tabs);\r\n}\r\n\r\n/**\r\n * Hook to get active tab id\r\n */\r\nexport function useActiveTabId() {\r\n  const store = useTabStore();\r\n  return store((state) => state.activeTabId);\r\n}\r\n\r\n/**\r\n * Hook to get active first level menu key\r\n */\r\nexport function useActiveFirstLevelMenuKey() {\r\n  const store = useTabStore();\r\n  return store((state) => state.activeFirstLevelMenuKey);\r\n}\r\n\r\n/**\r\n * Hook to get remove cache key\r\n */\r\nexport function useRemoveCacheKey() {\r\n  const store = useTabStore();\r\n  return store((state) => state.removeCacheKey);\r\n}\r\n\r\n/**\r\n * Hook to get tab actions\r\n */\r\nexport function useTabActions() {\r\n  const store = useTabStore();\r\n  return {\r\n    addTab: store.getState().addTab,\r\n    updateTab: store.getState().updateTab,\r\n    setActiveTabId: store.getState().setActiveTabId,\r\n    setActiveFirstLevelMenuKey: store.getState().setActiveFirstLevelMenuKey,\r\n    setTabs: store.getState().setTabs,\r\n    changeTabLabel: store.getState().changeTabLabel,\r\n    removeTabById: store.getState().removeTabById,\r\n    clearAllTabs: store.getState().clearAllTabs,\r\n    clearLeftTabs: store.getState().clearLeftTabs,\r\n    clearRightTabs: store.getState().clearRightTabs,\r\n    clearOtherTabs: store.getState().clearOtherTabs,\r\n    setRemoveCacheKey: store.getState().setRemoveCacheKey\r\n  };\r\n}\r\n\r\n/**\r\n * Hook to manage tab operations with navigation\r\n */\r\nexport function useTabManager(navigate?: (path: string) => void) {\r\n  const store = useTabStore();\r\n  const isInit = useRef(false);\r\n\r\n  const addTab = (route: Route) => {\r\n    const tab = getTabByRoute(route);\r\n\r\n    if (!isInit.current) {\r\n      isInit.current = true;\r\n\r\n      // Try to restore from cache\r\n      const cachedTabs = storage.get('globalTabs');\r\n      if (cachedTabs && cachedTabs.tabs && cachedTabs.tabs.length > 0) {\r\n        store.getState().setTabs(cachedTabs.tabs);\r\n        store.getState().setActiveTabId(cachedTabs.activeTabId || tab.id);\r\n        store.getState().setActiveFirstLevelMenuKey(cachedTabs.activeFirstLevelMenuKey || getActiveFirstLevelMenuKey(route));\r\n      } else {\r\n        store.getState().addTab(tab);\r\n        store.getState().setActiveTabId(tab.id);\r\n        store.getState().setActiveFirstLevelMenuKey(getActiveFirstLevelMenuKey(route));\r\n      }\r\n    } else if (!isTabInTabs(tab.id, store.getState().tabs)) {\r\n      store.getState().addTab(tab);\r\n    } else {\r\n      const index = store.getState().tabs.findIndex((item: Tab) => item.id === tab.id);\r\n      store.getState().updateTab(index, tab);\r\n    }\r\n\r\n    store.getState().setActiveTabId(tab.id);\r\n    store.getState().setActiveFirstLevelMenuKey(getActiveFirstLevelMenuKey(route));\r\n  };\r\n\r\n  const switchRouteByTab = (tab: Route) => {\r\n    if (navigate) {\r\n      navigate(tab.fullPath);\r\n    }\r\n    store.getState().setActiveTabId(tab.id);\r\n  };\r\n\r\n  const removeTabById = (tabId: string) => {\r\n    const tab = store.getState().tabs.find((t: Tab) => t.id === tabId);\r\n    if (tab) {\r\n      store.getState().removeTabById(tabId);\r\n      store.getState().setRemoveCacheKey([tab.routePath]);\r\n    }\r\n  };\r\n\r\n  const clearTabs = (excludes: string[] = []) => {\r\n    const fixedTabs = store.getState().tabs.filter((tab: Tab) => tab.fixedIndex !== undefined && tab.fixedIndex !== null);\r\n    const remainTabIds = [...fixedTabs.map((tab: Tab) => tab.id), ...excludes];\r\n\r\n    const removeKeepKeys: string[] = [];\r\n    const updatedTabs: Tab[] = [];\r\n\r\n    for (const tab of store.getState().tabs) {\r\n      if (remainTabIds.includes(tab.id)) {\r\n        updatedTabs.push(tab);\r\n      } else if (tab.keepAlive) {\r\n        removeKeepKeys.push(tab.routePath);\r\n      }\r\n    }\r\n\r\n    if (updatedTabs.length === store.getState().tabs.length) return;\r\n\r\n    if (!remainTabIds.includes(store.getState().activeTabId)) {\r\n      const currentIndex = store.getState().tabs.findIndex((tab: Tab) => tab.id === store.getState().activeTabId);\r\n      const newActive = store.getState().tabs[currentIndex + 1] || store.getState().tabs[currentIndex - 1] || updatedTabs[updatedTabs.length - 1];\r\n\r\n      if (newActive) {\r\n        switchRouteByTab({\r\n          fullPath: newActive.fullPath,\r\n          pathname: newActive.routePath,\r\n          id: newActive.routeKey,\r\n          handle: {\r\n            title: newActive.label,\r\n            keepAlive: newActive.keepAlive\r\n          }\r\n        });\r\n      }\r\n    }\r\n\r\n    store.getState().setTabs(updatedTabs);\r\n\r\n    if (removeKeepKeys.length > 0) {\r\n      store.getState().setRemoveCacheKey(removeKeepKeys);\r\n    }\r\n  };\r\n\r\n  const clearLeftTabs = (tabId: string) => {\r\n    const index = store.getState().tabs.findIndex((tab: Tab) => tab.id === tabId);\r\n    if (index === -1) return;\r\n\r\n    const excludes = store.getState().tabs.slice(index).map((tab: Tab) => tab.id);\r\n    clearTabs(excludes);\r\n  };\r\n\r\n  const clearRightTabs = (tabId: string) => {\r\n    const index = store.getState().tabs.findIndex((tab: Tab) => tab.id === tabId);\r\n    if (index === -1) return;\r\n\r\n    const excludes = store.getState().tabs.slice(0, index + 1).map((tab: Tab) => tab.id);\r\n    clearTabs(excludes);\r\n  };\r\n\r\n  const clearOtherTabs = (tabId: string) => {\r\n    const targetTab = store.getState().tabs.find((tab: Tab) => tab.id === tabId);\r\n    if (!targetTab) return;\r\n\r\n    const fixedTabs = store.getState().tabs.filter((tab: Tab) => tab.fixedIndex !== undefined && tab.fixedIndex !== null);\r\n    const newTabs = [...fixedTabs, targetTab];\r\n\r\n    store.getState().setTabs(newTabs);\r\n    store.getState().setActiveTabId(tabId);\r\n  };\r\n\r\n  const clearAllTabs = () => {\r\n    const fixedTabs = store.getState().tabs.filter((tab: Tab) => tab.fixedIndex !== undefined && tab.fixedIndex !== null);\r\n    const lastFixedTab = fixedTabs[fixedTabs.length - 1];\r\n\r\n    store.getState().setTabs(fixedTabs);\r\n    store.getState().setActiveTabId(lastFixedTab?.id || '');\r\n  };\r\n\r\n  const isTabRetain = (tabId: string) => {\r\n    const tab = store.getState().tabs.find((t: Tab) => t.id === tabId);\r\n    return tab ? (tab.fixedIndex !== undefined && tab.fixedIndex !== null) : false;\r\n  };\r\n\r\n  return {\r\n    addTab,\r\n    switchRouteByTab,\r\n    removeTabById,\r\n    clearTabs,\r\n    clearLeftTabs,\r\n    clearRightTabs,\r\n    clearOtherTabs,\r\n    clearAllTabs,\r\n    isTabRetain,\r\n    tabs: store.getState().tabs,\r\n    activeTabId: store.getState().activeTabId,\r\n    navigate\r\n  };\r\n}\r\n\r\n/**\r\n * Hook to cache tabs on beforeunload\r\n */\r\nexport function useCacheTabs() {\r\n  const store = useTabStore();\r\n\r\n  const cacheTabs = () => {\r\n    const state = store.getState();\r\n    storage.set('globalTabs', {\r\n      tabs: state.tabs,\r\n      activeTabId: state.activeTabId,\r\n      activeFirstLevelMenuKey: state.activeFirstLevelMenuKey\r\n    });\r\n  };\r\n\r\n  useEffect(() => {\r\n    const handleBeforeUnload = () => {\r\n      cacheTabs();\r\n    };\r\n\r\n    window.addEventListener('beforeunload', handleBeforeUnload);\r\n    return () => {\r\n      window.removeEventListener('beforeunload', handleBeforeUnload);\r\n    };\r\n  }, []);\r\n\r\n  return cacheTabs;\r\n}\r\n\r\n/**\r\n * Hook to get tab scroll utilities\r\n */\r\nexport function useTabScroll() {\r\n  const tabRef = useRef<HTMLDivElement>(null);\r\n  const bsWrapper = useRef<HTMLDivElement>(null);\r\n\r\n  const setBsScroll = (scrollLeft: number) => {\r\n    if (bsWrapper.current) {\r\n      bsWrapper.current.scrollLeft = scrollLeft;\r\n    }\r\n  };\r\n\r\n  return {\r\n    tabRef,\r\n    bsWrapper,\r\n    setBsScroll\r\n  };\r\n} "],"mappings":"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","names":["isTabRetain"]}