@lax-wp/design-system 0.13.46 → 0.13.47

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.es.js","sources":["../../../../src/components/navigation/tabs/Tabs.tsx"],"sourcesContent":["import {\n DndContext,\n MouseSensor,\n TouchSensor,\n closestCenter,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport type { DragEndEvent, DragOverEvent, DragStartEvent } from '@dnd-kit/core';\nimport { SortableContext, horizontalListSortingStrategy, arrayMove } from '@dnd-kit/sortable';\nimport { Dropdown } from 'antd';\nimport classNames from 'classnames';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport MoreHorizOutlinedIcon from '@mui/icons-material/MoreHorizOutlined';\n\nimport { DropableWrapper, MoreButton, SortableTab, TabDragOverlay, TabOptions, TabSwitch } from '.';\nimport type { SuffixRecord, Tab, TabOptionConfig, TabsProps } from './types';\nimport { INITIAL_TAB_OPTION_CONFIG } from './types';\n\nimport { formatCount } from '../../../utils/formatters';\n\nimport { useTabConfig } from '../../../providers/design-system-provider/hooks';\nimport { useTextWidth } from '../../../hooks/useTextWidth';\nimport IconButton from '../../button/IconButton';\nimport { OptionButton } from '../../buttons/option-button/OptionButton';\nimport { SearchBar } from '../../forms/search-bar/SearchBar';\nimport Tooltip from '../../tooltip/Tooltip';\nimport { EditIcon } from '../../icons/EditIcon';\nimport { toast } from 'react-toastify';\nimport { ArrowDownwardIcon, ArrowOutwardIcon, ArrowUpwardIcon, ContentCopyIcon, DeleteIcon, PinIcon, UnpinFilledIcon, VisibilityIcon, VisibilityOffIcon } from '../../icon';\n\nconst randomHex = () => Math.random().toString(16).slice(2, 13);\n\nconst TAB_MENU_CLASS = [\n '[&_.ant-dropdown-menu-item]:!outline-none',\n '[&_.ant-dropdown-menu-submenu-title]:!outline-none',\n '[&_.ant-dropdown-menu-item:focus-visible_.option-button-inner]:ring-2',\n '[&_.ant-dropdown-menu-item:focus-visible_.option-button-inner]:ring-primary-500',\n '[&_.ant-dropdown-menu-item:focus-visible_.option-button-inner]:bg-gray-50',\n '[&_.ant-dropdown-menu-item:focus-visible_.option-button-inner]:dark:bg-black-600',\n '[&_.ant-dropdown-menu-submenu-title:focus-visible_.option-button-inner]:ring-2',\n '[&_.ant-dropdown-menu-submenu-title:focus-visible_.option-button-inner]:ring-primary-500',\n '[&_.ant-dropdown-menu-submenu-title:focus-visible_.option-button-inner]:bg-gray-50',\n '[&_.ant-dropdown-menu-submenu-title:focus-visible_.option-button-inner]:dark:bg-black-600',\n].join(' ');\n\nlet dropdownTrigger: HTMLElement | null = null;\n\nconst handleDropdownOpen = (open: boolean) => {\n if (open) {\n dropdownTrigger = document.activeElement as HTMLElement;\n setTimeout(() => {\n const item = document.querySelector<HTMLElement>(\n '.row-option-cell .ant-dropdown-menu-item:not(.ant-dropdown-menu-item-disabled), .row-option-cell .ant-dropdown-menu-submenu-title',\n );\n item?.focus();\n }, 50);\n } else {\n setTimeout(() => {\n dropdownTrigger?.focus();\n dropdownTrigger = null;\n }, 0);\n }\n};\n\nconst ACTIONS = {\n SELECT: 'Select',\n MOVE_LEFT: 'MoveLeft',\n MOVE_RIGHT: 'MoveRight',\n HIDE: 'Hide',\n UNHIDE: 'Unhide',\n COPY_LINK: 'CopyLink',\n DELETE: 'Delete',\n PIN: 'Pin',\n UNPIN: 'Unpin',\n EDIT: 'Edit',\n} as const;\n\nexport const Tabs = <T extends string>({\n variant = 'default',\n tabs = [],\n activeTab,\n onTabClick,\n suffixRecord: suffixRecordProp,\n isLoading,\n size = 'md',\n className,\n draggable = false,\n showAllItems = false,\n copyLink = false,\n isDisabled = false,\n color = 'light',\n iconsOnly = false,\n tabIcons = {},\n height = 'h-6',\n fullWidth = false,\n fitContentWidth = false,\n disableAnimation = false,\n onEdit,\n onDelete,\n onCopyLink,\n allowPin = false,\n isFullWidth = false,\n rightSection,\n initialTabs: initialTabsProp,\n tabConfig: tabConfigProp,\n onTabConfigChange,\n onTabsChange,\n parentContainer = document.body,\n tabKey,\n linkConfig,\n showTabOptions = true,\n}: TabsProps<T>) => {\n // ── Provider integration ──\n const providerTabConfig = useTabConfig();\n const providerSettings = tabKey ? providerTabConfig?.getTabSettings(tabKey) : undefined;\n\n // Provider-sourced values are used only when the direct props are not passed\n const initialTabs = initialTabsProp ?? (providerSettings?.tab_items as Tab<T>[] | undefined);\n const tabConfig = tabConfigProp ?? providerSettings?.tab_options;\n // ── State ──\n const [search, setSearch] = useState('');\n const [showMoreDropdown, setShowMoreDropdown] = useState(false);\n const [visibleTabCounts, setVisibleTabCounts] = useState(0);\n const [allTabs, setAllTabs] = useState<Tab<T>[]>([]);\n const [sortedTabs, setSortedTabs] = useState<Tab<T>[]>([]);\n const [draggingOver, setDraggingOver] = useState<string | null>(null);\n const [draggingTab, setDraggingTab] = useState<string | null>(null);\n const [isHoveringTabOptions, setIsHoveringTabOptions] = useState(false);\n const [savedTabOptionConfig, setSavedTabOptionConfig] = useState<TabOptionConfig>(\n tabConfig ?? INITIAL_TAB_OPTION_CONFIG,\n );\n const [tabSearchFilter, setTabSearchFilter] = useState('');\n const [tabSearchFilterType, setTabSearchFilterType] = useState<'contains' | 'does-not-contain'>('contains');\n\n const { showCounts, lockOrder, sortOrder } = savedTabOptionConfig;\n\n // ── Refs & Hooks ──\n const { t } = useTranslation();\n const tabsRef = useRef<HTMLDivElement | null>(null);\n const ulRef = useRef<HTMLUListElement | null>(null);\n const visibleTabCountsRef = useRef(visibleTabCounts);\n const { measureText } = useTextWidth();\n const selectedId = useMemo(() => randomHex(), []);\n\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, { activationConstraint: { delay: 300, tolerance: 5 } }),\n );\n\n // ── Derived values ──\n // Counts are formatted once here (1000 -> \"1,000\") so the rendered badges and\n // the overflow width measurement always agree.\n const suffixRecord = useMemo(() => {\n if (!suffixRecordProp) return suffixRecordProp;\n return Object.fromEntries(\n Object.entries(suffixRecordProp).map(([name, value]) => [\n name,\n formatCount(value as string | number),\n ]),\n ) as SuffixRecord<T>;\n }, [suffixRecordProp]);\n\n const visibleTabs = useMemo(() => sortedTabs.filter(({ is_hidden }) => !is_hidden), [sortedTabs]);\n const hiddenTabs = useMemo(() => sortedTabs.filter(({ is_hidden }) => is_hidden), [sortedTabs]);\n\n const filteredVisibleTabs = useMemo(\n () =>\n visibleTabs.filter(({ name }) => {\n if (!tabSearchFilter) return true;\n const tabName = (name ?? '').toLowerCase();\n const searchValue = tabSearchFilter.toLowerCase();\n return tabSearchFilterType === 'contains'\n ? tabName.includes(searchValue)\n : !tabName.includes(searchValue);\n }),\n [visibleTabs, tabSearchFilter, tabSearchFilterType],\n );\n\n const sortedVisibleTabs = useMemo(\n () =>\n [...filteredVisibleTabs].sort((a, b) => {\n if (a.is_pinned && !b.is_pinned) return -1;\n if (!a.is_pinned && b.is_pinned) return 1;\n return 0;\n }),\n [filteredVisibleTabs],\n );\n\n const isTabOverflow = visibleTabCounts < sortedVisibleTabs.length;\n const visibleTabSlice = showAllItems\n ? sortedVisibleTabs.length\n : isTabOverflow\n ? visibleTabCounts\n : sortedVisibleTabs.length;\n const isActiveTabInsideMore =\n sortedVisibleTabs.findIndex((item) => item.name === activeTab) >= visibleTabSlice;\n const moreButtonTabCounts =\n allTabs.length - visibleTabSlice - (isActiveTabInsideMore ? 1 : 0);\n\n visibleTabCountsRef.current = visibleTabCounts;\n\n // ── Helpers ──\n const updateTabs = useCallback(\n (newTabs: Tab<T>[]) => {\n setAllTabs(newTabs);\n onTabsChange?.(newTabs);\n if (tabKey && providerTabConfig?.persistTabSettings) {\n providerTabConfig.persistTabSettings({ tab_type: tabKey, tab_items: newTabs });\n }\n },\n [onTabsChange, tabKey, providerTabConfig],\n );\n\n const updateTabConfig = useCallback(\n (config: TabOptionConfig) => {\n setSavedTabOptionConfig(config);\n onTabConfigChange?.(config);\n if (tabKey && providerTabConfig?.persistTabSettings) {\n providerTabConfig.persistTabSettings({ tab_type: tabKey, tab_options: config });\n }\n },\n [onTabConfigChange, tabKey, providerTabConfig],\n );\n\n const calculateIconWidth = (item: Tab<T>): number => (item.is_pinned ? 32 : 0);\n\n const calculateVisibleTabs = useCallback(\n (clientWidth: number) => {\n if (!clientWidth) return;\n const tabOptionsWidth = draggable ? 30 : 0;\n const moreWidth = showCounts ? 190 : 84;\n const tabGap = size === 'sm' ? 4 : 8;\n const basePadding = 32;\n let tabWidth = 0;\n let activeTabWidth = 0;\n let newVisibleTabCounts = 0;\n const availableWidth = clientWidth - (rightSection?.width || 0) - tabOptionsWidth;\n const currentCount = visibleTabCountsRef.current;\n const hasOverflow = currentCount < sortedVisibleTabs.length;\n const hasHidden = hiddenTabs.length > 0;\n\n for (let index = 0; index < sortedVisibleTabs.length; index++) {\n const item = sortedVisibleTabs[index];\n\n const suffixText = suffixRecord?.[item.name] ? String(suffixRecord?.[item.name]) : '';\n const suffixWidth =\n showCounts && suffixText\n ? measureText(suffixText, {\n fontSize: '16px',\n fontWeight: '500',\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n }) +\n 18 +\n 2\n : 0;\n\n const tabTitleWidth = measureText(item?.name || '', {\n fontSize: '16px',\n fontWeight: '600',\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n });\n\n const iconWidth = allowPin ? calculateIconWidth(item) : 0;\n const currentTabWidth = tabTitleWidth + suffixWidth + basePadding + tabGap + iconWidth;\n\n if (item.name === activeTab) {\n activeTabWidth = currentTabWidth;\n }\n\n tabWidth += currentTabWidth;\n\n if (\n availableWidth >\n tabWidth + (hasOverflow || hasHidden ? moreWidth : 0) + index * 25\n ) {\n newVisibleTabCounts = index + 1;\n } else {\n break;\n }\n }\n\n const remainingVisibleTabs = sortedVisibleTabs.length - newVisibleTabCounts;\n const totalRemainingTabs = remainingVisibleTabs + hiddenTabs.length;\n\n if (\n totalRemainingTabs === 1 &&\n hiddenTabs.length === 0 &&\n remainingVisibleTabs === 1 &&\n newVisibleTabCounts < sortedVisibleTabs.length\n ) {\n const lastTab = sortedVisibleTabs[newVisibleTabCounts];\n if (lastTab) {\n const suffixText = suffixRecord?.[lastTab.name] ? String(suffixRecord?.[lastTab.name]) : '';\n const suffixWidth =\n showCounts && suffixText\n ? measureText(suffixText, {\n fontSize: '16px',\n fontWeight: '500',\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n }) +\n 18 +\n 2\n : 0;\n const tabTitleWidth = measureText(lastTab?.name || '', {\n fontSize: '16px',\n fontWeight: '600',\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n });\n const iconWidth = allowPin ? calculateIconWidth(lastTab) : 0;\n const lastTabWidth = tabTitleWidth + suffixWidth + basePadding + tabGap + iconWidth;\n if (availableWidth >= tabWidth + lastTabWidth) {\n newVisibleTabCounts += 1;\n }\n }\n }\n\n const newVisibleSlice = showAllItems ? sortedVisibleTabs.length : newVisibleTabCounts;\n const activeInsideMore =\n sortedVisibleTabs.findIndex((item) => item.name === activeTab) >= newVisibleSlice;\n\n if (activeInsideMore) {\n tabWidth += activeTabWidth;\n if (\n availableWidth <\n tabWidth + (hasOverflow || hasHidden ? moreWidth : 0)\n ) {\n newVisibleTabCounts = Math.max(newVisibleTabCounts - 1, 0);\n }\n }\n\n if (newVisibleTabCounts !== currentCount) {\n setVisibleTabCounts(newVisibleTabCounts);\n }\n },\n [\n sortedVisibleTabs,\n showCounts,\n showAllItems,\n allowPin,\n suffixRecord,\n rightSection?.width,\n activeTab,\n size,\n draggable,\n hiddenTabs.length,\n measureText,\n ],\n );\n\n // ── Search params helper (uses provider abstraction when available) ──\n const getCurrentSearchParams = useCallback(\n () => {\n if (typeof window !== 'undefined') {\n return new URLSearchParams(window.location.search);\n }\n if (linkConfig && providerTabConfig?.getSearchParam) {\n const params = new URLSearchParams();\n const currentValue = providerTabConfig.getSearchParam(linkConfig.key);\n if (currentValue) params.set(linkConfig.key, currentValue);\n return params;\n }\n return new URLSearchParams();\n },\n [linkConfig, providerTabConfig],\n );\n\n const applyTabToSearchParams = useCallback(\n (params: URLSearchParams, tabName: string) => {\n if (!linkConfig) return params;\n if (tabName === linkConfig.defaultLink) {\n params.delete(linkConfig.key);\n } else {\n params.set(linkConfig.key, tabName);\n }\n linkConfig.onResolve?.(params);\n return params;\n },\n [linkConfig],\n );\n\n // ── Link href resolution ──\n const resolveTabHref = useCallback(\n (tabName: string): string | undefined => {\n if (!linkConfig) return undefined;\n const params = applyTabToSearchParams(getCurrentSearchParams(), tabName);\n return `?${params.toString()}`;\n },\n [applyTabToSearchParams, getCurrentSearchParams, linkConfig],\n );\n\n // ── Copy link ──\n const showCopyLink = copyLink || Boolean(linkConfig);\n\n const handleCopyLink = useCallback(\n async (tabName: T) => {\n const search = resolveTabHref(tabName);\n const origin = typeof window !== 'undefined' ? window.location.origin : '';\n const pathname = typeof window !== 'undefined' ? window.location.pathname : '';\n const href = search\n ? `${origin}${pathname}${search}`\n : `${origin}${pathname}`;\n await navigator.clipboard.writeText(href);\n toast.success(t(\"Link copied to clipboard\"), {\n toastId: 'Link copied to clipboard',\n });\n onCopyLink?.(tabName, href);\n },\n [resolveTabHref, t, onCopyLink],\n );\n\n // ── Tab actions ──\n const handleSelectTab = (tabName: T) => {\n setShowMoreDropdown(false);\n onTabClick?.(tabName);\n if (linkConfig && providerTabConfig?.navigate) {\n const params = applyTabToSearchParams(getCurrentSearchParams(), tabName);\n providerTabConfig.navigate(`?${params.toString()}`);\n }\n };\n\n const hideTab = (tabName: T) => {\n if (sortedVisibleTabs.length <= 1) return;\n\n const _tabs = allTabs.map((item) =>\n item.name === tabName ? { ...item, is_hidden: true } : item,\n );\n\n const visibleIndex = sortedVisibleTabs.findIndex((item) => item.name === tabName);\n const nextIndex = visibleIndex === 0 ? 1 : visibleIndex - 1;\n handleSelectTab(sortedVisibleTabs[nextIndex].name);\n\n updateTabs(_tabs);\n };\n\n const unhideTab = (tabName: T) => {\n const _tabs = allTabs.map((item) =>\n item.name === tabName ? { ...item, is_hidden: false } : item,\n );\n\n setShowMoreDropdown(false);\n updateTabs(_tabs);\n };\n\n const togglePinTab = (tabName: T) => {\n if (!allowPin) return;\n const _tabs = allTabs.map((item) =>\n item.name === tabName ? { ...item, is_pinned: !item.is_pinned } : item,\n );\n updateTabs(_tabs);\n };\n\n const moveTab = (tabName: T, direction: 'left' | 'right') => {\n const oldIndex = allTabs.findIndex(({ name }) => name === tabName);\n const newIndex =\n direction === 'left'\n ? oldIndex - (allTabs[oldIndex - 1]?.name === activeTab ? 2 : 1)\n : oldIndex + 1;\n updateTabs(arrayMove(allTabs, oldIndex, newIndex));\n };\n\n const handleShowMoreDropdown = () => setShowMoreDropdown(!showMoreDropdown);\n\n // ── Drag handlers ──\n const handleDragStart = (event: DragStartEvent) => setDraggingTab(event.active.id as string);\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (over?.id === 'more-tabs') {\n hideTab(active.id as T);\n setDraggingTab(null);\n setDraggingOver(null);\n return;\n }\n const oldIndex = allTabs.findIndex(({ name }) => name === active.id);\n const newIndex = allTabs.findIndex(({ name }) => name === over?.id);\n updateTabs(arrayMove(allTabs, oldIndex, newIndex));\n setDraggingTab(null);\n setDraggingOver(null);\n };\n\n const handleDragCancel = () => {\n setDraggingTab(null);\n setDraggingOver(null);\n };\n\n const handleDragOver = (event: DragOverEvent) => {\n setDraggingOver(event.over?.id === 'more-tabs' ? 'more-tabs' : null);\n };\n\n const handleTabSort = () => {\n // Sorting is handled via sortedTabs effect — no direct allTabs mutation\n };\n\n const handleSearchFilterChange = (\n searchValue: string,\n filterType: 'contains' | 'does-not-contain',\n ) => {\n setTabSearchFilter(searchValue);\n setTabSearchFilterType(filterType);\n };\n\n // ── Tab context menu options ──\n const getTabOptions = (title: T, isHidden = false, isSoftHidden = false) => {\n const tab = allTabs.find((_t) => _t.name === title);\n const isPinned = tab?.is_pinned;\n\n const options = [\n {\n label: (\n <OptionButton\n icon={<ArrowOutwardIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Select Tab\")}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.SELECT,\n onClick: () => handleSelectTab(title),\n },\n {\n label: (\n <OptionButton\n icon={<ArrowUpwardIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Move Up\")}\n isDisabled={lockOrder}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.MOVE_LEFT,\n disabled: lockOrder,\n onClick: () => moveTab(title, 'left'),\n },\n {\n label: (\n <OptionButton\n icon={<ArrowDownwardIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Move Down\")}\n isDisabled={lockOrder}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.MOVE_RIGHT,\n disabled: lockOrder,\n onClick: () => moveTab(title, 'right'),\n },\n {\n label: (\n <OptionButton\n icon={<ContentCopyIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Copy Link\")}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.COPY_LINK,\n onClick: () => handleCopyLink(title),\n },\n {\n label: (\n <OptionButton\n icon={<VisibilityOffIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Hide\")}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.HIDE,\n onClick: () => hideTab(title),\n },\n {\n label: (\n <OptionButton\n icon={<VisibilityIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Unhide\")}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.UNHIDE,\n onClick: () => unhideTab(title),\n },\n {\n label: (\n <OptionButton\n icon={isPinned ? <UnpinFilledIcon size={20} className='rotate-12 text-inherit dark:text-inherit'/> : <PinIcon size={20} className='rotate-45 text-inherit dark:text-inherit' />}\n text={isPinned ? t(\"Unpin\") : t(\"Pin\")}\n className=\"text-black-900 dark:text-white\"\n notVisible={!allowPin}\n />\n ),\n key: isPinned ? ACTIONS.UNPIN : ACTIONS.PIN,\n onClick: () => togglePinTab(title),\n },\n {\n label: (\n <OptionButton\n className=\"text-black-900 dark:text-white\"\n icon={<EditIcon />}\n text={t('Edit')}\n notVisible={!onEdit}\n />\n ),\n key: ACTIONS.EDIT,\n onClick: () => onEdit?.(title),\n },\n {\n label: (\n <OptionButton\n className=\"text-error-600 dark:text-error-600\"\n icon={<DeleteIcon size={18} className='text-error-600 dark:text-error-600' />}\n text={t(\"Delete\")}\n notVisible={!onDelete}\n />\n ),\n key: ACTIONS.DELETE,\n onClick: () => onDelete?.(title),\n },\n ];\n\n const hiddenFilter: string[] = [ACTIONS.HIDE, ACTIONS.UNHIDE];\n const defaultFilter: string[] = [ACTIONS.SELECT, ACTIONS.MOVE_LEFT, ACTIONS.MOVE_RIGHT, ACTIONS.UNHIDE];\n\n return options\n .filter((item) =>\n isHidden\n ? item.key === ACTIONS.UNHIDE\n : isSoftHidden\n ? !hiddenFilter.includes(item.key)\n : !defaultFilter.includes(item.key),\n )\n .filter((item) => (showCopyLink ? true : item.key !== ACTIONS.COPY_LINK))\n .filter((item) => (sortedVisibleTabs.length === 1 ? item.key !== ACTIONS.HIDE : true));\n };\n\n // ── Class maps ──\n const getClasses = (\n classType: 'classValue' | 'selectedClassValue' | 'textClassValue',\n isSelected: boolean,\n ) => {\n const classes = {\n classValue: {\n default: classNames('relative inline-flex pt-2 pb-3 px-2 pl-3 sm:px-2 rounded-t-sm group'),\n secondary: classNames(\n 'flex w-full sm:w-auto relative rounded-lg font-sans font-semibold text-center cursor-pointer uppercase',\n size === 'sm' ? 'py-1 px-3 text-sm' : 'py-2 px-4 text-base',\n ),\n },\n selectedClassValue: {\n default: classNames('absolute left-0 bottom-0 w-full h-[3px] bg-primary-600'),\n secondary: classNames('absolute inset-0 bg-primary-50 dark:bg-primary-975 rounded-lg'),\n },\n textClassValue: {\n default: classNames(\n 'relative uppercase font-sans font-semibold text-sm whitespace-nowrap',\n isSelected\n ? 'text-primary-600 dark:text-primary-500'\n : 'text-neutral-400 hover:text-neutral-500 dark:text-neutral-100 dark:hover:text-white',\n ),\n secondary: classNames(\n 'relative whitespace-nowrap text-sm',\n isSelected\n ? 'text-primary-600 dark:text-primary-500'\n : 'text-neutral-400 dark:text-neutral-400',\n ),\n },\n };\n return classes[classType][variant as 'default' | 'secondary'];\n };\n\n // ── Effects ──\n // ResizeObserver for responsive overflow\n useEffect(() => {\n if (!tabsRef.current || variant === 'switch') return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n const containerWidth = entries[0].contentRect.width;\n calculateVisibleTabs(containerWidth);\n });\n\n resizeObserver.observe(tabsRef.current);\n calculateVisibleTabs(tabsRef.current.clientWidth);\n\n return () => resizeObserver.disconnect();\n }, [calculateVisibleTabs, variant]);\n\n // Stable stringified keys to avoid re-init when prop references change but values don't\n const tabsKey = JSON.stringify(tabs);\n const initialTabsKey = JSON.stringify(initialTabs?.map(({ name }) => name));\n\n // Initialize allTabs from props or initialTabs\n useEffect(() => {\n if (initialTabs?.length) {\n let _tabs = [...initialTabs];\n tabs.forEach((tab) => {\n if (!_tabs.find((item) => item.name === tab)) {\n _tabs.push({ name: tab, is_default: false, is_hidden: false, is_pinned: false });\n }\n });\n _tabs = _tabs.filter(\n (item, index, self) =>\n tabs.includes(item.name) && index === self.findIndex((_t) => _t.name === item.name),\n );\n setAllTabs(_tabs);\n } else {\n setAllTabs(\n tabs\n .map((item) => ({ name: item, is_default: false, is_hidden: false, is_pinned: false }))\n .filter((item, index, self) => index === self.findIndex((_t) => _t.name === item.name)),\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tabsKey, initialTabsKey]);\n\n // Sync tabConfig prop\n useEffect(() => {\n if (tabConfig) {\n setSavedTabOptionConfig(tabConfig);\n }\n }, [tabConfig]);\n\n // Sort tabs\n useEffect(() => {\n if (!allTabs.length) return;\n const _sortedTabs = [...allTabs];\n if (sortOrder === 'asc') {\n _sortedTabs.sort((a, b) => a.name.localeCompare(b.name));\n } else if (sortOrder === 'desc') {\n _sortedTabs.sort((a, b) => b.name.localeCompare(a.name));\n }\n setSortedTabs(_sortedTabs);\n }, [allTabs, sortOrder]);\n\n // Focus first menu item when More dropdown opens\n useEffect(() => {\n handleDropdownOpen(showMoreDropdown);\n }, [showMoreDropdown]);\n\n // ── Variant: switch ──\n if (variant === 'switch') {\n return (\n <div className={classNames('inline', className)}>\n <ul\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n className={classNames(\n 'inline-flex grow-0 p-1 rounded-lg',\n color === 'dark'\n ? 'border-[1.5px] border-neutral-800 bg-neutral-800 dark:border-black-800'\n : 'bg-neutral-100 dark:bg-black-700',\n fullWidth ? 'w-full' : 'w-auto',\n )}\n >\n {tabs.map((title: T) => {\n const isSelected = activeTab === title;\n const icon = tabIcons?.[title];\n const tab = allTabs.find((_t) => _t.name === title);\n const isPinned = allowPin && tab?.is_pinned;\n\n return (\n <li key={title} role=\"presentation\" className={classNames('inline-flex', fullWidth ? 'w-full' : 'w-auto')}>\n <TabSwitch\n title={title}\n showCounts={showCounts}\n role=\"tab\"\n ariaSelected={isSelected}\n tabIndex={0}\n icon={\n isPinned ? (\n <Tooltip title=\"Unpin\">\n <span onClick={() => togglePinTab(title)}>\n <PinIcon size={20} className='rotate-45 text-inherit dark:text-inherit' />\n </span>\n </Tooltip>\n ) : (\n icon\n )\n }\n iconsOnly={iconsOnly}\n classValue={classNames(\n 'relative py-0.5 border-gray-200',\n height,\n fullWidth ? 'w-full flex items-center justify-center' : 'px-2',\n )}\n selectedClassValue={classNames(\n 'absolute inset-0 rounded-md z-0',\n color === 'dark' ? 'bg-neutral-900' : 'bg-white dark:bg-black-800',\n )}\n textClassValue={classNames(\n 'relative text-xs font-semibold font-sans whitespace-nowrap',\n isSelected\n ? 'text-neutral-900 dark:text-neutral-100'\n : 'text-neutral-700 dark:text-neutral-100',\n )}\n isSelected={isSelected}\n href={resolveTabHref(title)}\n onClick={!isDisabled ? () => handleSelectTab(title) : undefined}\n suffixRecord={suffixRecord}\n selectedId={selectedId}\n color={color}\n disableAnimation={disableAnimation}\n />\n </li>\n );\n })}\n </ul>\n </div>\n );\n }\n\n // ── Variant: default / secondary ──\n return (\n <div\n ref={tabsRef}\n className={classNames(fitContentWidth ? 'w-fit' : 'w-full')}\n onMouseEnter={() => setIsHoveringTabOptions(true)}\n onMouseLeave={() => setIsHoveringTabOptions(false)}\n >\n <DndContext\n sensors={sensors}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n collisionDetection={closestCenter}\n onDragOver={handleDragOver}\n >\n <ul\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n className={classNames(\n 'flex items-center w-full',\n className,\n isFullWidth ? 'gap-0' : size === 'sm' ? 'gap-1' : 'gap-2',\n )}\n ref={ulRef}\n >\n {isLoading ? (\n <div className=\"skeleton bg-neutral-300 dark:bg-black-700 animate-pulse h-10 min-w-[100px] w-full rounded\" />\n ) : (\n <SortableContext\n items={sortedVisibleTabs.map(({ name }) => name)}\n strategy={horizontalListSortingStrategy}\n id=\"sortable\"\n disabled={!draggable || lockOrder}\n >\n {sortedVisibleTabs.slice(0, visibleTabSlice).map(({ name, is_pinned }) => {\n const isSelected = activeTab === name && !showMoreDropdown;\n const isPinned = allowPin && is_pinned;\n\n return (\n <SortableTab\n key={name}\n title={name}\n isDragging={draggingTab === name}\n className={isFullWidth ? 'flex-1 flex justify-center' : ''}\n >\n <li key={name} role=\"presentation\" className={classNames(isFullWidth ? 'w-full flex' : 'sm:mr-2')}>\n <TabSwitch\n showCounts={showCounts}\n title={name}\n role=\"tab\"\n ariaSelected={isSelected}\n tabIndex={0}\n classValue={classNames(\n getClasses('classValue', isSelected),\n isFullWidth ? 'w-full justify-center' : '',\n )}\n selectedClassValue={getClasses('selectedClassValue', isSelected)}\n textClassValue={getClasses('textClassValue', isSelected)}\n isSelected={isSelected}\n tabOptions={\n isSelected && draggable ? (\n <Dropdown\n menu={{\n items: getTabOptions(name as T),\n className: TAB_MENU_CLASS,\n }}\n trigger={['click']}\n onOpenChange={handleDropdownOpen}\n overlayClassName=\"row-option-cell\"\n rootClassName=\"\"\n openClassName=\"max-h-[350px] overflow-y-auto\"\n placement=\"bottom\"\n >\n <IconButton\n tooltip={t(\"More\")}\n variant=\"ghost\"\n className=\"!text-primary-500 hover:!bg-primary-100 dark:hover:!bg-primary-900\"\n >\n <MoreHorizOutlinedIcon sx={{ fontSize: 20 }} />\n </IconButton>\n </Dropdown>\n ) : null\n }\n draggingTab={draggingTab === name}\n href={resolveTabHref(name)}\n onClick={() => handleSelectTab(name as T)}\n suffixRecord={suffixRecord}\n selectedId={selectedId}\n icon={\n isPinned ? (\n <Tooltip title={t(\"Unpin\")}>\n <span onClick={() => togglePinTab(name as T)}>\n <PinIcon size={20} className='rotate-45 text-inherit dark:text-inherit' />\n </span>\n </Tooltip>\n ) : (\n tabIcons?.[name] ?? null\n )\n }\n />\n </li>\n </SortableTab>\n );\n })}\n\n {/* Active tab pulled from overflow */}\n {activeTab && isActiveTabInsideMore ? (\n <SortableTab key={activeTab} title={activeTab} isDragging={draggingTab === activeTab}>\n <li key={activeTab} role=\"presentation\" className={classNames('sm:mr-2')}>\n <TabSwitch\n showCounts={showCounts}\n title={activeTab}\n role=\"tab\"\n ariaSelected={true}\n tabIndex={0}\n classValue={getClasses('classValue', true)}\n selectedClassValue={getClasses('selectedClassValue', true)}\n textClassValue={getClasses('textClassValue', true)}\n isSelected={true}\n tabOptions={\n draggable ? (\n <Dropdown\n menu={{\n items: getTabOptions(activeTab),\n className: TAB_MENU_CLASS,\n }}\n trigger={['click']}\n onOpenChange={handleDropdownOpen}\n overlayClassName=\"row-option-cell\"\n rootClassName=\"\"\n openClassName=\"max-h-[350px] overflow-y-auto\"\n placement=\"bottom\"\n >\n <MoreHorizOutlinedIcon sx={{ fontSize: 20 }} className=\"text-primary-600\" />\n </Dropdown>\n ) : null\n }\n draggingTab={draggingTab === activeTab}\n href={resolveTabHref(activeTab)}\n suffixRecord={suffixRecord}\n selectedId={selectedId}\n icon={\n allowPin && allTabs.find((tab) => tab.name === activeTab)?.is_pinned ? (\n <Tooltip title={t(\"Pinned\")}>\n <span onClick={() => togglePinTab(activeTab)}>\n <PinIcon size={20} className='rotate-45 text-inherit dark:text-inherit' />\n </span>\n </Tooltip>\n ) : (\n tabIcons?.[activeTab] ?? null\n )\n }\n />\n </li>\n </SortableTab>\n ) : null}\n\n {/* More dropdown */}\n {((visibleTabCounts < sortedVisibleTabs.length && !showAllItems) ||\n hiddenTabs.length > 0) &&\n moreButtonTabCounts > 0 ? (\n <DropableWrapper id=\"more-tabs\">\n <Dropdown\n overlayStyle={{\n maxHeight: 'calc(100vh - 350px)',\n overflow: 'auto',\n marginTop: '8px',\n scrollbarWidth: 'none',\n borderRadius: 8,\n boxShadow:\n '0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05)',\n }}\n onOpenChange={() => handleShowMoreDropdown()}\n open={showMoreDropdown}\n menu={{\n items: [\n {\n key: 'Search',\n disabled: true,\n style: { minWidth: '190px', marginBottom: '8px' },\n label: (\n <div className=\"px-2 bg-white dark:bg-black-800\">\n <SearchBar\n id=\"search-bar-more-tabs\"\n value={search}\n classValues=\"!rounded-lg\"\n onChange={(e) => setSearch(e)}\n />\n </div>\n ),\n },\n ...sortedVisibleTabs\n .slice(visibleTabSlice)\n .filter((item) => item.name !== activeTab)\n .concat(hiddenTabs)\n .filter(\n ({ name }) =>\n typeof name === 'string' &&\n (name ?? '').toLowerCase().includes(search.toLowerCase()),\n )\n .map(({ name, is_hidden }) => ({\n key: name,\n label: (\n <OptionButton\n className={classNames(\n 'uppercase',\n is_hidden\n ? 'text-neutral-400 dark:text-neutral-500'\n : 'text-black-900 dark:text-black-200',\n )}\n text={name}\n suffixRecord={showCounts ? suffixRecord : {}}\n highlight={search}\n truncateText={true}\n isDisabled={is_hidden}\n onClick={is_hidden ? undefined : () => {\n handleSelectTab(name as T);\n setShowMoreDropdown(false);\n }}\n />\n ),\n popupClassName: TAB_MENU_CLASS,\n children: showMoreDropdown ? getTabOptions(name as T, is_hidden, true) : null,\n })),\n ],\n className: TAB_MENU_CLASS,\n }}\n openClassName=\"max-h-[350px] overflow-y-auto\"\n trigger={['click']}\n overlayClassName=\"row-option-cell\"\n placement=\"bottomRight\"\n getPopupContainer={(trigger) => trigger.parentElement as HTMLElement}\n >\n <MoreButton\n title={`${showCounts ? moreButtonTabCounts : ''} ${showCounts ? '' : ''}MORE...`}\n variant={variant}\n size={size}\n draggingOver={draggingOver}\n suffixRecord={suffixRecord}\n handleShowMoreDropdown={handleShowMoreDropdown}\n selectedId={selectedId}\n showMoreDropdown={showMoreDropdown}\n />\n </Dropdown>\n </DropableWrapper>\n ) : null}\n </SortableContext>\n )}\n {rightSection ? (\n <div className={classNames(rightSection?.className)}>\n <li>{rightSection.component}</li>\n </div>\n ) : null}\n {draggable && showTabOptions && (\n <li\n className={classNames(\n isHoveringTabOptions ? 'opacity-100' : 'opacity-0',\n 'transition-opacity duration-300',\n )}\n >\n <TabOptions\n hasSuffixRecord={Boolean(\n suffixRecord && Object.keys(suffixRecord).length > 0,\n )}\n savedConfig={savedTabOptionConfig}\n onApplyFilter={(config) => updateTabConfig(config)}\n setUnsavedChanges={() => {\n /* handled by onTabsChange / onTabConfigChange */\n }}\n handleTabSort={handleTabSort}\n onSearchChange={handleSearchFilterChange}\n />\n </li>\n )}\n </ul>\n {draggingTab ? (\n <TabDragOverlay\n draggingTab={draggingTab}\n suffixRecord={suffixRecord}\n size={size}\n variant={variant}\n selectedId={selectedId}\n parentContainer={parentContainer}\n />\n ) : null}\n </DndContext>\n </div>\n );\n};\n"],"names":["randomHex","TAB_MENU_CLASS","dropdownTrigger","handleDropdownOpen","open","ACTIONS","Tabs","variant","tabs","activeTab","onTabClick","suffixRecordProp","isLoading","size","className","draggable","showAllItems","copyLink","isDisabled","color","iconsOnly","tabIcons","height","fullWidth","fitContentWidth","disableAnimation","onEdit","onDelete","onCopyLink","allowPin","isFullWidth","rightSection","initialTabsProp","tabConfigProp","onTabConfigChange","onTabsChange","parentContainer","tabKey","linkConfig","showTabOptions","providerTabConfig","useTabConfig","providerSettings","initialTabs","tabConfig","search","setSearch","useState","showMoreDropdown","setShowMoreDropdown","visibleTabCounts","setVisibleTabCounts","allTabs","setAllTabs","sortedTabs","setSortedTabs","draggingOver","setDraggingOver","draggingTab","setDraggingTab","isHoveringTabOptions","setIsHoveringTabOptions","savedTabOptionConfig","setSavedTabOptionConfig","INITIAL_TAB_OPTION_CONFIG","tabSearchFilter","setTabSearchFilter","tabSearchFilterType","setTabSearchFilterType","showCounts","lockOrder","sortOrder","t","useTranslation","tabsRef","useRef","ulRef","visibleTabCountsRef","measureText","useTextWidth","selectedId","useMemo","sensors","useSensors","useSensor","MouseSensor","TouchSensor","suffixRecord","name","value","formatCount","visibleTabs","is_hidden","hiddenTabs","filteredVisibleTabs","tabName","searchValue","sortedVisibleTabs","a","b","isTabOverflow","visibleTabSlice","isActiveTabInsideMore","item","moreButtonTabCounts","updateTabs","useCallback","newTabs","updateTabConfig","config","calculateIconWidth","calculateVisibleTabs","clientWidth","tabOptionsWidth","moreWidth","tabGap","basePadding","tabWidth","activeTabWidth","newVisibleTabCounts","availableWidth","currentCount","hasOverflow","hasHidden","index","suffixText","suffixWidth","tabTitleWidth","iconWidth","currentTabWidth","remainingVisibleTabs","lastTab","lastTabWidth","newVisibleSlice","getCurrentSearchParams","params","currentValue","applyTabToSearchParams","resolveTabHref","showCopyLink","handleCopyLink","origin","pathname","href","toast","handleSelectTab","hideTab","_tabs","visibleIndex","nextIndex","unhideTab","togglePinTab","moveTab","direction","oldIndex","newIndex","arrayMove","handleShowMoreDropdown","handleDragStart","event","handleDragEnd","active","over","handleDragCancel","handleDragOver","handleTabSort","handleSearchFilterChange","filterType","getTabOptions","title","isHidden","isSoftHidden","isPinned","_t","options","jsx","OptionButton","ArrowOutwardIcon","ArrowUpwardIcon","ArrowDownwardIcon","ContentCopyIcon","VisibilityOffIcon","VisibilityIcon","UnpinFilledIcon","PinIcon","EditIcon","DeleteIcon","hiddenFilter","defaultFilter","getClasses","classType","isSelected","classNames","useEffect","resizeObserver","entries","containerWidth","tabsKey","initialTabsKey","tab","self","_sortedTabs","icon","TabSwitch","Tooltip","jsxs","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","is_pinned","SortableTab","Dropdown","IconButton","MoreHorizOutlinedIcon","DropableWrapper","SearchBar","trigger","MoreButton","TabOptions","TabDragOverlay"],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.es.js","sources":["../../../../src/components/navigation/tabs/Tabs.tsx"],"sourcesContent":["import {\n DndContext,\n MouseSensor,\n TouchSensor,\n closestCenter,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport type { DragEndEvent, DragOverEvent, DragStartEvent } from '@dnd-kit/core';\nimport { SortableContext, horizontalListSortingStrategy, arrayMove } from '@dnd-kit/sortable';\nimport { Dropdown } from 'antd';\nimport classNames from 'classnames';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport MoreHorizOutlinedIcon from '@mui/icons-material/MoreHorizOutlined';\n\nimport { DropableWrapper, MoreButton, SortableTab, TabDragOverlay, TabOptions, TabSwitch } from '.';\nimport type { SuffixRecord, Tab, TabOptionConfig, TabsProps } from './types';\nimport { INITIAL_TAB_OPTION_CONFIG } from './types';\n\nimport { formatCount } from '../../../utils/formatters';\n\nimport { useTabConfig } from '../../../providers/design-system-provider/hooks';\nimport { useTextWidth } from '../../../hooks/useTextWidth';\nimport IconButton from '../../button/IconButton';\nimport { OptionButton } from '../../buttons/option-button/OptionButton';\nimport { SearchBar } from '../../forms/search-bar/SearchBar';\nimport Tooltip from '../../tooltip/Tooltip';\nimport { EditIcon } from '../../icons/EditIcon';\nimport { toast } from 'react-toastify';\nimport { ArrowDownwardIcon, ArrowOutwardIcon, ArrowUpwardIcon, ContentCopyIcon, DeleteIcon, PinIcon, UnpinFilledIcon, VisibilityIcon, VisibilityOffIcon } from '../../icon';\n\nconst randomHex = () => Math.random().toString(16).slice(2, 13);\n\nconst TAB_MENU_CLASS = [\n '[&_.ant-dropdown-menu-item]:!outline-none',\n '[&_.ant-dropdown-menu-submenu-title]:!outline-none',\n '[&_.ant-dropdown-menu-item:focus-visible_.option-button-inner]:ring-2',\n '[&_.ant-dropdown-menu-item:focus-visible_.option-button-inner]:ring-primary-500',\n '[&_.ant-dropdown-menu-item:focus-visible_.option-button-inner]:bg-gray-50',\n '[&_.ant-dropdown-menu-item:focus-visible_.option-button-inner]:dark:bg-black-600',\n '[&_.ant-dropdown-menu-submenu-title:focus-visible_.option-button-inner]:ring-2',\n '[&_.ant-dropdown-menu-submenu-title:focus-visible_.option-button-inner]:ring-primary-500',\n '[&_.ant-dropdown-menu-submenu-title:focus-visible_.option-button-inner]:bg-gray-50',\n '[&_.ant-dropdown-menu-submenu-title:focus-visible_.option-button-inner]:dark:bg-black-600',\n].join(' ');\n\nlet dropdownTrigger: HTMLElement | null = null;\n\nconst handleDropdownOpen = (open: boolean) => {\n if (open) {\n dropdownTrigger = document.activeElement as HTMLElement;\n setTimeout(() => {\n const item = document.querySelector<HTMLElement>(\n '.row-option-cell .ant-dropdown-menu-item:not(.ant-dropdown-menu-item-disabled), .row-option-cell .ant-dropdown-menu-submenu-title',\n );\n item?.focus();\n }, 50);\n } else {\n setTimeout(() => {\n dropdownTrigger?.focus();\n dropdownTrigger = null;\n }, 0);\n }\n};\n\nconst ACTIONS = {\n SELECT: 'Select',\n MOVE_LEFT: 'MoveLeft',\n MOVE_RIGHT: 'MoveRight',\n HIDE: 'Hide',\n UNHIDE: 'Unhide',\n COPY_LINK: 'CopyLink',\n DELETE: 'Delete',\n PIN: 'Pin',\n UNPIN: 'Unpin',\n EDIT: 'Edit',\n} as const;\n\nexport const Tabs = <T extends string>({\n variant = 'default',\n tabs = [],\n activeTab,\n onTabClick,\n suffixRecord: suffixRecordProp,\n isLoading,\n size = 'md',\n className,\n draggable = false,\n showAllItems = false,\n copyLink = false,\n isDisabled = false,\n color = 'light',\n iconsOnly = false,\n tabIcons = {},\n height = 'h-6',\n fullWidth = false,\n fitContentWidth = false,\n disableAnimation = false,\n onEdit,\n onDelete,\n onCopyLink,\n allowPin = false,\n isFullWidth = false,\n rightSection,\n initialTabs: initialTabsProp,\n tabConfig: tabConfigProp,\n onTabConfigChange,\n onTabsChange,\n parentContainer = document.body,\n tabKey,\n linkConfig,\n showTabOptions = true,\n}: TabsProps<T>) => {\n // ── Provider integration ──\n const providerTabConfig = useTabConfig();\n const providerSettings = tabKey ? providerTabConfig?.getTabSettings(tabKey) : undefined;\n\n // Provider-sourced values are used only when the direct props are not passed\n const initialTabs = initialTabsProp ?? (providerSettings?.tab_items as Tab<T>[] | undefined);\n const tabConfig = tabConfigProp ?? providerSettings?.tab_options;\n // ── State ──\n const [search, setSearch] = useState('');\n const [showMoreDropdown, setShowMoreDropdown] = useState(false);\n const [visibleTabCounts, setVisibleTabCounts] = useState(0);\n const [allTabs, setAllTabs] = useState<Tab<T>[]>([]);\n const [sortedTabs, setSortedTabs] = useState<Tab<T>[]>([]);\n const [draggingOver, setDraggingOver] = useState<string | null>(null);\n const [draggingTab, setDraggingTab] = useState<string | null>(null);\n const [isHoveringTabOptions, setIsHoveringTabOptions] = useState(false);\n const [savedTabOptionConfig, setSavedTabOptionConfig] = useState<TabOptionConfig>(\n tabConfig ?? INITIAL_TAB_OPTION_CONFIG,\n );\n const [tabSearchFilter, setTabSearchFilter] = useState('');\n const [tabSearchFilterType, setTabSearchFilterType] = useState<'contains' | 'does-not-contain'>('contains');\n\n const { showCounts, lockOrder, sortOrder } = savedTabOptionConfig;\n\n // ── Refs & Hooks ──\n const { t } = useTranslation();\n const tabsRef = useRef<HTMLDivElement | null>(null);\n const ulRef = useRef<HTMLUListElement | null>(null);\n const visibleTabCountsRef = useRef(visibleTabCounts);\n const { measureText } = useTextWidth();\n const selectedId = useMemo(() => randomHex(), []);\n\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, { activationConstraint: { delay: 300, tolerance: 5 } }),\n );\n\n // ── Derived values ──\n // Counts are formatted once here (1000 -> \"1,000\") so the rendered badges and\n // the overflow width measurement always agree.\n const suffixRecord = useMemo(() => {\n if (!suffixRecordProp) return suffixRecordProp;\n return Object.fromEntries(\n Object.entries(suffixRecordProp).map(([name, value]) => [\n name,\n formatCount(value as string | number),\n ]),\n ) as SuffixRecord<T>;\n }, [suffixRecordProp]);\n\n const visibleTabs = useMemo(() => sortedTabs.filter(({ is_hidden }) => !is_hidden), [sortedTabs]);\n const hiddenTabs = useMemo(() => sortedTabs.filter(({ is_hidden }) => is_hidden), [sortedTabs]);\n\n const filteredVisibleTabs = useMemo(\n () =>\n visibleTabs.filter(({ name }) => {\n if (!tabSearchFilter) return true;\n const tabName = (name ?? '').toLowerCase();\n const searchValue = tabSearchFilter.toLowerCase();\n return tabSearchFilterType === 'contains'\n ? tabName.includes(searchValue)\n : !tabName.includes(searchValue);\n }),\n [visibleTabs, tabSearchFilter, tabSearchFilterType],\n );\n\n const sortedVisibleTabs = useMemo(\n () =>\n [...filteredVisibleTabs].sort((a, b) => {\n if (a.is_pinned && !b.is_pinned) return -1;\n if (!a.is_pinned && b.is_pinned) return 1;\n return 0;\n }),\n [filteredVisibleTabs],\n );\n\n const isTabOverflow = visibleTabCounts < sortedVisibleTabs.length;\n const visibleTabSlice = showAllItems\n ? sortedVisibleTabs.length\n : isTabOverflow\n ? visibleTabCounts\n : sortedVisibleTabs.length;\n const isActiveTabInsideMore =\n sortedVisibleTabs.findIndex((item) => item.name === activeTab) >= visibleTabSlice;\n const moreButtonTabCounts =\n allTabs.length - visibleTabSlice - (isActiveTabInsideMore ? 1 : 0);\n\n visibleTabCountsRef.current = visibleTabCounts;\n\n // ── Helpers ──\n const updateTabs = useCallback(\n (newTabs: Tab<T>[]) => {\n setAllTabs(newTabs);\n onTabsChange?.(newTabs);\n if (tabKey && providerTabConfig?.persistTabSettings) {\n providerTabConfig.persistTabSettings({ tab_type: tabKey, tab_items: newTabs });\n }\n },\n [onTabsChange, tabKey, providerTabConfig],\n );\n\n const updateTabConfig = useCallback(\n (config: TabOptionConfig) => {\n setSavedTabOptionConfig(config);\n onTabConfigChange?.(config);\n if (tabKey && providerTabConfig?.persistTabSettings) {\n providerTabConfig.persistTabSettings({ tab_type: tabKey, tab_options: config });\n }\n },\n [onTabConfigChange, tabKey, providerTabConfig],\n );\n\n const calculateIconWidth = (item: Tab<T>): number => (item.is_pinned ? 32 : 0);\n\n const calculateVisibleTabs = useCallback(\n (clientWidth: number) => {\n if (!clientWidth) return;\n const tabOptionsWidth = draggable ? 30 : 0;\n const moreWidth = showCounts ? 190 : 84;\n const tabGap = size === 'sm' ? 4 : 8;\n const basePadding = 32;\n let tabWidth = 0;\n let activeTabWidth = 0;\n let newVisibleTabCounts = 0;\n const availableWidth = clientWidth - (rightSection?.width || 0) - tabOptionsWidth;\n const currentCount = visibleTabCountsRef.current;\n const hasOverflow = currentCount < sortedVisibleTabs.length;\n const hasHidden = hiddenTabs.length > 0;\n\n for (let index = 0; index < sortedVisibleTabs.length; index++) {\n const item = sortedVisibleTabs[index];\n\n const suffixText = suffixRecord?.[item.name] ? String(suffixRecord?.[item.name]) : '';\n const suffixWidth =\n showCounts && suffixText\n ? measureText(suffixText, {\n fontSize: '16px',\n fontWeight: '500',\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n }) +\n 18 +\n 2\n : 0;\n\n const tabTitleWidth = measureText(item?.name || '', {\n fontSize: '16px',\n fontWeight: '600',\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n });\n\n const iconWidth = allowPin ? calculateIconWidth(item) : 0;\n const currentTabWidth = tabTitleWidth + suffixWidth + basePadding + tabGap + iconWidth;\n\n if (item.name === activeTab) {\n activeTabWidth = currentTabWidth;\n }\n\n tabWidth += currentTabWidth;\n\n if (\n availableWidth >\n tabWidth + (hasOverflow || hasHidden ? moreWidth : 0) + index * 25\n ) {\n newVisibleTabCounts = index + 1;\n } else {\n break;\n }\n }\n\n const remainingVisibleTabs = sortedVisibleTabs.length - newVisibleTabCounts;\n const totalRemainingTabs = remainingVisibleTabs + hiddenTabs.length;\n\n if (\n totalRemainingTabs === 1 &&\n hiddenTabs.length === 0 &&\n remainingVisibleTabs === 1 &&\n newVisibleTabCounts < sortedVisibleTabs.length\n ) {\n const lastTab = sortedVisibleTabs[newVisibleTabCounts];\n if (lastTab) {\n const suffixText = suffixRecord?.[lastTab.name] ? String(suffixRecord?.[lastTab.name]) : '';\n const suffixWidth =\n showCounts && suffixText\n ? measureText(suffixText, {\n fontSize: '16px',\n fontWeight: '500',\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n }) +\n 18 +\n 2\n : 0;\n const tabTitleWidth = measureText(lastTab?.name || '', {\n fontSize: '16px',\n fontWeight: '600',\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n });\n const iconWidth = allowPin ? calculateIconWidth(lastTab) : 0;\n const lastTabWidth = tabTitleWidth + suffixWidth + basePadding + tabGap + iconWidth;\n if (availableWidth >= tabWidth + lastTabWidth) {\n newVisibleTabCounts += 1;\n }\n }\n }\n\n const newVisibleSlice = showAllItems ? sortedVisibleTabs.length : newVisibleTabCounts;\n const activeInsideMore =\n sortedVisibleTabs.findIndex((item) => item.name === activeTab) >= newVisibleSlice;\n\n if (activeInsideMore) {\n tabWidth += activeTabWidth;\n if (\n availableWidth <\n tabWidth + (hasOverflow || hasHidden ? moreWidth : 0)\n ) {\n newVisibleTabCounts = Math.max(newVisibleTabCounts - 1, 0);\n }\n }\n\n if (newVisibleTabCounts !== currentCount) {\n setVisibleTabCounts(newVisibleTabCounts);\n }\n },\n [\n sortedVisibleTabs,\n showCounts,\n showAllItems,\n allowPin,\n suffixRecord,\n rightSection?.width,\n activeTab,\n size,\n draggable,\n hiddenTabs.length,\n measureText,\n ],\n );\n\n // ── Search params helper (uses provider abstraction when available) ──\n const getCurrentSearchParams = useCallback(\n () => {\n if (typeof window !== 'undefined') {\n return new URLSearchParams(window.location.search);\n }\n if (linkConfig && providerTabConfig?.getSearchParam) {\n const params = new URLSearchParams();\n const currentValue = providerTabConfig.getSearchParam(linkConfig.key);\n if (currentValue) params.set(linkConfig.key, currentValue);\n return params;\n }\n return new URLSearchParams();\n },\n [linkConfig, providerTabConfig],\n );\n\n const applyTabToSearchParams = useCallback(\n (params: URLSearchParams, tabName: string) => {\n if (!linkConfig) return params;\n if (tabName === linkConfig.defaultLink) {\n params.delete(linkConfig.key);\n } else {\n params.set(linkConfig.key, tabName);\n }\n linkConfig.onResolve?.(params);\n return params;\n },\n [linkConfig],\n );\n\n // ── Link href resolution ──\n const resolveTabHref = useCallback(\n (tabName: string): string | undefined => {\n if (!linkConfig) return undefined;\n const params = applyTabToSearchParams(getCurrentSearchParams(), tabName);\n return `?${params.toString()}`;\n },\n [applyTabToSearchParams, getCurrentSearchParams, linkConfig],\n );\n\n // ── Copy link ──\n const showCopyLink = copyLink || Boolean(linkConfig);\n\n const handleCopyLink = useCallback(\n async (tabName: T) => {\n const search = resolveTabHref(tabName);\n const origin = typeof window !== 'undefined' ? window.location.origin : '';\n const pathname = typeof window !== 'undefined' ? window.location.pathname : '';\n const href = search\n ? `${origin}${pathname}${search}`\n : `${origin}${pathname}`;\n await navigator.clipboard.writeText(href);\n toast.success(t(\"Link copied to clipboard\"), {\n toastId: 'Link copied to clipboard',\n });\n onCopyLink?.(tabName, href);\n },\n [resolveTabHref, t, onCopyLink],\n );\n\n // ── Tab actions ──\n const handleSelectTab = (tabName: T) => {\n setShowMoreDropdown(false);\n onTabClick?.(tabName);\n if (linkConfig && providerTabConfig?.navigate) {\n const params = applyTabToSearchParams(getCurrentSearchParams(), tabName);\n providerTabConfig.navigate(`?${params.toString()}`);\n }\n };\n\n const hideTab = (tabName: T) => {\n if (sortedVisibleTabs.length <= 1) return;\n\n const _tabs = allTabs.map((item) =>\n item.name === tabName ? { ...item, is_hidden: true } : item,\n );\n\n const visibleIndex = sortedVisibleTabs.findIndex((item) => item.name === tabName);\n const nextIndex = visibleIndex === 0 ? 1 : visibleIndex - 1;\n handleSelectTab(sortedVisibleTabs[nextIndex].name);\n\n updateTabs(_tabs);\n };\n\n const unhideTab = (tabName: T) => {\n const _tabs = allTabs.map((item) =>\n item.name === tabName ? { ...item, is_hidden: false } : item,\n );\n\n setShowMoreDropdown(false);\n updateTabs(_tabs);\n };\n\n const togglePinTab = (tabName: T) => {\n if (!allowPin) return;\n const _tabs = allTabs.map((item) =>\n item.name === tabName ? { ...item, is_pinned: !item.is_pinned } : item,\n );\n updateTabs(_tabs);\n };\n\n const moveTab = (tabName: T, direction: 'left' | 'right') => {\n const oldIndex = allTabs.findIndex(({ name }) => name === tabName);\n const newIndex =\n direction === 'left'\n ? oldIndex - (allTabs[oldIndex - 1]?.name === activeTab ? 2 : 1)\n : oldIndex + 1;\n updateTabs(arrayMove(allTabs, oldIndex, newIndex));\n };\n\n const handleShowMoreDropdown = () => setShowMoreDropdown(!showMoreDropdown);\n\n // ── Drag handlers ──\n const handleDragStart = (event: DragStartEvent) => setDraggingTab(event.active.id as string);\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (over?.id === 'more-tabs') {\n hideTab(active.id as T);\n setDraggingTab(null);\n setDraggingOver(null);\n return;\n }\n const oldIndex = allTabs.findIndex(({ name }) => name === active.id);\n const newIndex = allTabs.findIndex(({ name }) => name === over?.id);\n updateTabs(arrayMove(allTabs, oldIndex, newIndex));\n setDraggingTab(null);\n setDraggingOver(null);\n };\n\n const handleDragCancel = () => {\n setDraggingTab(null);\n setDraggingOver(null);\n };\n\n const handleDragOver = (event: DragOverEvent) => {\n setDraggingOver(event.over?.id === 'more-tabs' ? 'more-tabs' : null);\n };\n\n const handleTabSort = () => {\n // Sorting is handled via sortedTabs effect — no direct allTabs mutation\n };\n\n const handleSearchFilterChange = (\n searchValue: string,\n filterType: 'contains' | 'does-not-contain',\n ) => {\n setTabSearchFilter(searchValue);\n setTabSearchFilterType(filterType);\n };\n\n // ── Tab context menu options ──\n const getTabOptions = (title: T, isHidden = false, isSoftHidden = false) => {\n const tab = allTabs.find((_t) => _t.name === title);\n const isPinned = tab?.is_pinned;\n\n const options = [\n {\n label: (\n <OptionButton\n icon={<ArrowOutwardIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Select Tab\")}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.SELECT,\n onClick: () => handleSelectTab(title),\n },\n {\n label: (\n <OptionButton\n icon={<ArrowUpwardIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Move Up\")}\n isDisabled={lockOrder}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.MOVE_LEFT,\n disabled: lockOrder,\n onClick: () => moveTab(title, 'left'),\n },\n {\n label: (\n <OptionButton\n icon={<ArrowDownwardIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Move Down\")}\n isDisabled={lockOrder}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.MOVE_RIGHT,\n disabled: lockOrder,\n onClick: () => moveTab(title, 'right'),\n },\n {\n label: (\n <OptionButton\n icon={<ContentCopyIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Copy Link\")}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.COPY_LINK,\n onClick: () => handleCopyLink(title),\n },\n {\n label: (\n <OptionButton\n icon={<VisibilityOffIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Hide\")}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.HIDE,\n onClick: () => hideTab(title),\n },\n {\n label: (\n <OptionButton\n icon={<VisibilityIcon size={18} className='text-inherit dark:text-inherit' />}\n text={t(\"Unhide\")}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: ACTIONS.UNHIDE,\n onClick: () => unhideTab(title),\n },\n {\n label: (\n <OptionButton\n icon={isPinned ? <UnpinFilledIcon size={20} className='rotate-12 text-inherit dark:text-inherit'/> : <PinIcon size={20} className='rotate-45 text-inherit dark:text-inherit' />}\n text={isPinned ? t(\"Unpin\") : t(\"Pin\")}\n className=\"text-black-900 dark:text-white\"\n notVisible={!allowPin}\n />\n ),\n key: isPinned ? ACTIONS.UNPIN : ACTIONS.PIN,\n onClick: () => togglePinTab(title),\n },\n {\n label: (\n <OptionButton\n className=\"text-black-900 dark:text-white\"\n icon={<EditIcon />}\n text={t('Edit')}\n notVisible={!onEdit}\n />\n ),\n key: ACTIONS.EDIT,\n onClick: () => onEdit?.(title),\n },\n {\n label: (\n <OptionButton\n className=\"text-error-600 dark:text-error-600\"\n icon={<DeleteIcon size={18} className='text-error-600 dark:text-error-600' />}\n text={t(\"Delete\")}\n notVisible={!onDelete}\n />\n ),\n key: ACTIONS.DELETE,\n onClick: () => onDelete?.(title),\n },\n ];\n\n const hiddenFilter: string[] = [ACTIONS.HIDE, ACTIONS.UNHIDE];\n const defaultFilter: string[] = [ACTIONS.SELECT, ACTIONS.MOVE_LEFT, ACTIONS.MOVE_RIGHT, ACTIONS.UNHIDE];\n\n return options\n .filter((item) =>\n isHidden\n ? item.key === ACTIONS.UNHIDE\n : isSoftHidden\n ? !hiddenFilter.includes(item.key)\n : !defaultFilter.includes(item.key),\n )\n .filter((item) => (showCopyLink ? true : item.key !== ACTIONS.COPY_LINK))\n .filter((item) => (sortedVisibleTabs.length === 1 ? item.key !== ACTIONS.HIDE : true));\n };\n\n // ── Class maps ──\n const getClasses = (\n classType: 'classValue' | 'selectedClassValue' | 'textClassValue',\n isSelected: boolean,\n ) => {\n const classes = {\n classValue: {\n default: classNames('relative inline-flex pt-2 pb-3 px-2 pl-3 sm:px-2 rounded-t-sm group'),\n secondary: classNames(\n 'flex w-full sm:w-auto relative rounded-lg font-sans font-semibold text-center cursor-pointer uppercase',\n size === 'sm' ? 'py-1 px-3 text-sm' : 'py-2 px-4 text-base',\n ),\n },\n selectedClassValue: {\n default: classNames('absolute left-0 bottom-0 w-full h-[3px] bg-primary-600'),\n secondary: classNames('absolute inset-0 bg-primary-50 dark:bg-primary-975 rounded-lg'),\n },\n textClassValue: {\n default: classNames(\n 'relative uppercase font-sans font-semibold text-sm whitespace-nowrap',\n isSelected\n ? 'text-primary-600 dark:text-primary-500'\n : 'text-neutral-400 hover:text-neutral-500 dark:text-neutral-100 dark:hover:text-white',\n ),\n secondary: classNames(\n 'relative whitespace-nowrap text-sm',\n isSelected\n ? 'text-primary-600 dark:text-primary-500'\n : 'text-neutral-400 dark:text-neutral-400',\n ),\n },\n };\n return classes[classType][variant as 'default' | 'secondary'];\n };\n\n // ── Effects ──\n // ResizeObserver for responsive overflow\n useEffect(() => {\n if (!tabsRef.current || variant === 'switch') return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n const containerWidth = entries[0].contentRect.width;\n calculateVisibleTabs(containerWidth);\n });\n\n resizeObserver.observe(tabsRef.current);\n calculateVisibleTabs(tabsRef.current.clientWidth);\n\n return () => resizeObserver.disconnect();\n }, [calculateVisibleTabs, variant]);\n\n // Stable stringified keys to avoid re-init when prop references change but values don't\n const tabsKey = JSON.stringify(tabs);\n const initialTabsKey = JSON.stringify(initialTabs?.map(({ name }) => name));\n\n // Initialize allTabs from props or initialTabs\n useEffect(() => {\n if (initialTabs?.length) {\n let _tabs = [...initialTabs];\n tabs.forEach((tab) => {\n if (!_tabs.find((item) => item.name === tab)) {\n _tabs.push({ name: tab, is_default: false, is_hidden: false, is_pinned: false });\n }\n });\n _tabs = _tabs.filter(\n (item, index, self) =>\n tabs.includes(item.name) && index === self.findIndex((_t) => _t.name === item.name),\n );\n setAllTabs(_tabs);\n } else {\n setAllTabs(\n tabs\n .map((item) => ({ name: item, is_default: false, is_hidden: false, is_pinned: false }))\n .filter((item, index, self) => index === self.findIndex((_t) => _t.name === item.name)),\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tabsKey, initialTabsKey]);\n\n // Sync tabConfig prop\n useEffect(() => {\n if (tabConfig) {\n setSavedTabOptionConfig(tabConfig);\n }\n }, [tabConfig]);\n\n // Sort tabs\n useEffect(() => {\n if (!allTabs.length) return;\n const _sortedTabs = [...allTabs];\n if (sortOrder === 'asc') {\n _sortedTabs.sort((a, b) => a.name.localeCompare(b.name));\n } else if (sortOrder === 'desc') {\n _sortedTabs.sort((a, b) => b.name.localeCompare(a.name));\n }\n setSortedTabs(_sortedTabs);\n }, [allTabs, sortOrder]);\n\n // Focus first menu item when More dropdown opens\n useEffect(() => {\n handleDropdownOpen(showMoreDropdown);\n }, [showMoreDropdown]);\n\n // ── Variant: switch ──\n if (variant === 'switch') {\n return (\n <div className={classNames('inline', className)}>\n <ul\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n className={classNames(\n 'inline-flex grow-0 p-1 rounded-lg',\n color === 'dark'\n ? 'border-[1.5px] border-neutral-800 bg-neutral-800 dark:border-black-800'\n : 'bg-neutral-100 dark:bg-black-700',\n fullWidth ? 'w-full' : 'w-auto',\n )}\n >\n {tabs.map((title: T) => {\n const isSelected = activeTab === title;\n const icon = tabIcons?.[title];\n const tab = allTabs.find((_t) => _t.name === title);\n const isPinned = allowPin && tab?.is_pinned;\n\n return (\n <li key={title} role=\"presentation\" className={classNames('inline-flex', fullWidth ? 'w-full' : 'w-auto')}>\n <TabSwitch\n title={title}\n showCounts={showCounts}\n role=\"tab\"\n ariaSelected={isSelected}\n tabIndex={0}\n icon={\n isPinned ? (\n <Tooltip title=\"Unpin\">\n <span onClick={() => togglePinTab(title)}>\n <PinIcon className='rotate-45 w-icon h-icon text-inherit dark:text-inherit' />\n </span>\n </Tooltip>\n ) : (\n icon\n )\n }\n iconsOnly={iconsOnly}\n classValue={classNames(\n 'relative py-0.5 border-gray-200',\n height,\n fullWidth ? 'w-full flex items-center justify-center' : 'px-2',\n )}\n selectedClassValue={classNames(\n 'absolute inset-0 rounded-md z-0',\n color === 'dark' ? 'bg-neutral-900' : 'bg-white dark:bg-black-800',\n )}\n textClassValue={classNames(\n 'relative text-xs font-semibold font-sans whitespace-nowrap',\n isSelected\n ? 'text-neutral-900 dark:text-neutral-100'\n : 'text-neutral-700 dark:text-neutral-100',\n )}\n isSelected={isSelected}\n href={resolveTabHref(title)}\n onClick={!isDisabled ? () => handleSelectTab(title) : undefined}\n suffixRecord={suffixRecord}\n selectedId={selectedId}\n color={color}\n disableAnimation={disableAnimation}\n />\n </li>\n );\n })}\n </ul>\n </div>\n );\n }\n\n // ── Variant: default / secondary ──\n return (\n <div\n ref={tabsRef}\n className={classNames(fitContentWidth ? 'w-fit' : 'w-full')}\n onMouseEnter={() => setIsHoveringTabOptions(true)}\n onMouseLeave={() => setIsHoveringTabOptions(false)}\n >\n <DndContext\n sensors={sensors}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n collisionDetection={closestCenter}\n onDragOver={handleDragOver}\n >\n <ul\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n className={classNames(\n 'flex items-center w-full',\n className,\n isFullWidth ? 'gap-0' : size === 'sm' ? 'gap-1' : 'gap-2',\n )}\n ref={ulRef}\n >\n {isLoading ? (\n <div className=\"skeleton bg-neutral-300 dark:bg-black-700 animate-pulse h-10 min-w-[100px] w-full rounded\" />\n ) : (\n <SortableContext\n items={sortedVisibleTabs.map(({ name }) => name)}\n strategy={horizontalListSortingStrategy}\n id=\"sortable\"\n disabled={!draggable || lockOrder}\n >\n {sortedVisibleTabs.slice(0, visibleTabSlice).map(({ name, is_pinned }) => {\n const isSelected = activeTab === name && !showMoreDropdown;\n const isPinned = allowPin && is_pinned;\n\n return (\n <SortableTab\n key={name}\n title={name}\n isDragging={draggingTab === name}\n className={isFullWidth ? 'flex-1 flex justify-center' : ''}\n >\n <li key={name} role=\"presentation\" className={classNames(isFullWidth ? 'w-full flex' : 'sm:mr-2')}>\n <TabSwitch\n showCounts={showCounts}\n title={name}\n role=\"tab\"\n ariaSelected={isSelected}\n tabIndex={0}\n classValue={classNames(\n getClasses('classValue', isSelected),\n isFullWidth ? 'w-full justify-center' : '',\n )}\n selectedClassValue={getClasses('selectedClassValue', isSelected)}\n textClassValue={getClasses('textClassValue', isSelected)}\n isSelected={isSelected}\n tabOptions={\n isSelected && draggable ? (\n <Dropdown\n menu={{\n items: getTabOptions(name as T),\n className: TAB_MENU_CLASS,\n }}\n trigger={['click']}\n onOpenChange={handleDropdownOpen}\n overlayClassName=\"row-option-cell\"\n rootClassName=\"\"\n openClassName=\"max-h-[350px] overflow-y-auto\"\n placement=\"bottom\"\n >\n <IconButton\n tooltip={t(\"More\")}\n variant=\"ghost\"\n className=\"!text-primary-500 hover:!bg-primary-100 dark:hover:!bg-primary-900\"\n >\n <MoreHorizOutlinedIcon sx={{ fontSize: 20 }} />\n </IconButton>\n </Dropdown>\n ) : null\n }\n draggingTab={draggingTab === name}\n href={resolveTabHref(name)}\n onClick={() => handleSelectTab(name as T)}\n suffixRecord={suffixRecord}\n selectedId={selectedId}\n icon={\n isPinned ? (\n <Tooltip title={t(\"Unpin\")}>\n <span onClick={() => togglePinTab(name as T)}>\n <PinIcon size={20} className='rotate-45 text-inherit dark:text-inherit' />\n </span>\n </Tooltip>\n ) : (\n tabIcons?.[name] ?? null\n )\n }\n />\n </li>\n </SortableTab>\n );\n })}\n\n {/* Active tab pulled from overflow */}\n {activeTab && isActiveTabInsideMore ? (\n <SortableTab key={activeTab} title={activeTab} isDragging={draggingTab === activeTab}>\n <li key={activeTab} role=\"presentation\" className={classNames('sm:mr-2')}>\n <TabSwitch\n showCounts={showCounts}\n title={activeTab}\n role=\"tab\"\n ariaSelected={true}\n tabIndex={0}\n classValue={getClasses('classValue', true)}\n selectedClassValue={getClasses('selectedClassValue', true)}\n textClassValue={getClasses('textClassValue', true)}\n isSelected={true}\n tabOptions={\n draggable ? (\n <Dropdown\n menu={{\n items: getTabOptions(activeTab),\n className: TAB_MENU_CLASS,\n }}\n trigger={['click']}\n onOpenChange={handleDropdownOpen}\n overlayClassName=\"row-option-cell\"\n rootClassName=\"\"\n openClassName=\"max-h-[350px] overflow-y-auto\"\n placement=\"bottom\"\n >\n <MoreHorizOutlinedIcon sx={{ fontSize: 20 }} className=\"text-primary-600\" />\n </Dropdown>\n ) : null\n }\n draggingTab={draggingTab === activeTab}\n href={resolveTabHref(activeTab)}\n suffixRecord={suffixRecord}\n selectedId={selectedId}\n icon={\n allowPin && allTabs.find((tab) => tab.name === activeTab)?.is_pinned ? (\n <Tooltip title={t(\"Pinned\")}>\n <span onClick={() => togglePinTab(activeTab)}>\n <PinIcon size={20} className='rotate-45 text-inherit dark:text-inherit' />\n </span>\n </Tooltip>\n ) : (\n tabIcons?.[activeTab] ?? null\n )\n }\n />\n </li>\n </SortableTab>\n ) : null}\n\n {/* More dropdown */}\n {((visibleTabCounts < sortedVisibleTabs.length && !showAllItems) ||\n hiddenTabs.length > 0) &&\n moreButtonTabCounts > 0 ? (\n <DropableWrapper id=\"more-tabs\">\n <Dropdown\n overlayStyle={{\n maxHeight: 'calc(100vh - 350px)',\n overflow: 'auto',\n marginTop: '8px',\n scrollbarWidth: 'none',\n borderRadius: 8,\n boxShadow:\n '0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05)',\n }}\n onOpenChange={() => handleShowMoreDropdown()}\n open={showMoreDropdown}\n menu={{\n items: [\n {\n key: 'Search',\n disabled: true,\n style: { minWidth: '190px', marginBottom: '8px' },\n label: (\n <div className=\"px-2 bg-white dark:bg-black-800\">\n <SearchBar\n id=\"search-bar-more-tabs\"\n value={search}\n classValues=\"!rounded-lg\"\n onChange={(e) => setSearch(e)}\n />\n </div>\n ),\n },\n ...sortedVisibleTabs\n .slice(visibleTabSlice)\n .filter((item) => item.name !== activeTab)\n .concat(hiddenTabs)\n .filter(\n ({ name }) =>\n typeof name === 'string' &&\n (name ?? '').toLowerCase().includes(search.toLowerCase()),\n )\n .map(({ name, is_hidden }) => ({\n key: name,\n label: (\n <OptionButton\n className={classNames(\n 'uppercase',\n is_hidden\n ? 'text-neutral-400 dark:text-neutral-500'\n : 'text-black-900 dark:text-black-200',\n )}\n text={name}\n suffixRecord={showCounts ? suffixRecord : {}}\n highlight={search}\n truncateText={true}\n isDisabled={is_hidden}\n onClick={is_hidden ? undefined : () => {\n handleSelectTab(name as T);\n setShowMoreDropdown(false);\n }}\n />\n ),\n popupClassName: TAB_MENU_CLASS,\n children: showMoreDropdown ? getTabOptions(name as T, is_hidden, true) : null,\n })),\n ],\n className: TAB_MENU_CLASS,\n }}\n openClassName=\"max-h-[350px] overflow-y-auto\"\n trigger={['click']}\n overlayClassName=\"row-option-cell\"\n placement=\"bottomRight\"\n getPopupContainer={(trigger) => trigger.parentElement as HTMLElement}\n >\n <MoreButton\n title={`${showCounts ? moreButtonTabCounts : ''} ${showCounts ? '' : ''}MORE...`}\n variant={variant}\n size={size}\n draggingOver={draggingOver}\n suffixRecord={suffixRecord}\n handleShowMoreDropdown={handleShowMoreDropdown}\n selectedId={selectedId}\n showMoreDropdown={showMoreDropdown}\n />\n </Dropdown>\n </DropableWrapper>\n ) : null}\n </SortableContext>\n )}\n {rightSection ? (\n <div className={classNames(rightSection?.className)}>\n <li>{rightSection.component}</li>\n </div>\n ) : null}\n {draggable && showTabOptions && (\n <li\n className={classNames(\n isHoveringTabOptions ? 'opacity-100' : 'opacity-0',\n 'transition-opacity duration-300',\n )}\n >\n <TabOptions\n hasSuffixRecord={Boolean(\n suffixRecord && Object.keys(suffixRecord).length > 0,\n )}\n savedConfig={savedTabOptionConfig}\n onApplyFilter={(config) => updateTabConfig(config)}\n setUnsavedChanges={() => {\n /* handled by onTabsChange / onTabConfigChange */\n }}\n handleTabSort={handleTabSort}\n onSearchChange={handleSearchFilterChange}\n />\n </li>\n )}\n </ul>\n {draggingTab ? (\n <TabDragOverlay\n draggingTab={draggingTab}\n suffixRecord={suffixRecord}\n size={size}\n variant={variant}\n selectedId={selectedId}\n parentContainer={parentContainer}\n />\n ) : null}\n </DndContext>\n </div>\n );\n};\n"],"names":["randomHex","TAB_MENU_CLASS","dropdownTrigger","handleDropdownOpen","open","ACTIONS","Tabs","variant","tabs","activeTab","onTabClick","suffixRecordProp","isLoading","size","className","draggable","showAllItems","copyLink","isDisabled","color","iconsOnly","tabIcons","height","fullWidth","fitContentWidth","disableAnimation","onEdit","onDelete","onCopyLink","allowPin","isFullWidth","rightSection","initialTabsProp","tabConfigProp","onTabConfigChange","onTabsChange","parentContainer","tabKey","linkConfig","showTabOptions","providerTabConfig","useTabConfig","providerSettings","initialTabs","tabConfig","search","setSearch","useState","showMoreDropdown","setShowMoreDropdown","visibleTabCounts","setVisibleTabCounts","allTabs","setAllTabs","sortedTabs","setSortedTabs","draggingOver","setDraggingOver","draggingTab","setDraggingTab","isHoveringTabOptions","setIsHoveringTabOptions","savedTabOptionConfig","setSavedTabOptionConfig","INITIAL_TAB_OPTION_CONFIG","tabSearchFilter","setTabSearchFilter","tabSearchFilterType","setTabSearchFilterType","showCounts","lockOrder","sortOrder","t","useTranslation","tabsRef","useRef","ulRef","visibleTabCountsRef","measureText","useTextWidth","selectedId","useMemo","sensors","useSensors","useSensor","MouseSensor","TouchSensor","suffixRecord","name","value","formatCount","visibleTabs","is_hidden","hiddenTabs","filteredVisibleTabs","tabName","searchValue","sortedVisibleTabs","a","b","isTabOverflow","visibleTabSlice","isActiveTabInsideMore","item","moreButtonTabCounts","updateTabs","useCallback","newTabs","updateTabConfig","config","calculateIconWidth","calculateVisibleTabs","clientWidth","tabOptionsWidth","moreWidth","tabGap","basePadding","tabWidth","activeTabWidth","newVisibleTabCounts","availableWidth","currentCount","hasOverflow","hasHidden","index","suffixText","suffixWidth","tabTitleWidth","iconWidth","currentTabWidth","remainingVisibleTabs","lastTab","lastTabWidth","newVisibleSlice","getCurrentSearchParams","params","currentValue","applyTabToSearchParams","resolveTabHref","showCopyLink","handleCopyLink","origin","pathname","href","toast","handleSelectTab","hideTab","_tabs","visibleIndex","nextIndex","unhideTab","togglePinTab","moveTab","direction","oldIndex","newIndex","arrayMove","handleShowMoreDropdown","handleDragStart","event","handleDragEnd","active","over","handleDragCancel","handleDragOver","handleTabSort","handleSearchFilterChange","filterType","getTabOptions","title","isHidden","isSoftHidden","isPinned","_t","options","jsx","OptionButton","ArrowOutwardIcon","ArrowUpwardIcon","ArrowDownwardIcon","ContentCopyIcon","VisibilityOffIcon","VisibilityIcon","UnpinFilledIcon","PinIcon","EditIcon","DeleteIcon","hiddenFilter","defaultFilter","getClasses","classType","isSelected","classNames","useEffect","resizeObserver","entries","containerWidth","tabsKey","initialTabsKey","tab","self","_sortedTabs","icon","TabSwitch","Tooltip","jsxs","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","is_pinned","SortableTab","Dropdown","IconButton","MoreHorizOutlinedIcon","DropableWrapper","SearchBar","trigger","MoreButton","TabOptions","TabDragOverlay"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lax-wp/design-system",
3
3
  "private": false,
4
- "version": "0.13.46",
4
+ "version": "0.13.47",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
7
7
  "module": "dist/index.es.js",