@lax-wp/design-system 0.14.40 → 0.14.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js +2 -0
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js.map +1 -0
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.d.ts +30 -0
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js +248 -0
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js.map +1 -0
- package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js +166 -149
- package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/constants.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/constants.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/constants.d.ts +8 -0
- package/dist/components/data-display/infinite-table/constants.es.js +24 -20
- package/dist/components/data-display/infinite-table/constants.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/context.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/context.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/context.d.ts +5 -2
- package/dist/components/data-display/infinite-table/context.es.js +3 -1
- package/dist/components/data-display/infinite-table/context.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/copy-text.cjs.js +2 -0
- package/dist/components/data-display/infinite-table/copy-text.cjs.js.map +1 -0
- package/dist/components/data-display/infinite-table/copy-text.d.ts +13 -0
- package/dist/components/data-display/infinite-table/copy-text.es.js +56 -0
- package/dist/components/data-display/infinite-table/copy-text.es.js.map +1 -0
- package/dist/components/data-display/infinite-table/head/cell/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.es.js +44 -46
- package/dist/components/data-display/infinite-table/head/cell/index.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/index.d.ts +1 -1
- package/dist/components/data-display/infinite-table/index.es.js +623 -606
- package/dist/components/data-display/infinite-table/index.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/types.d.ts +75 -4
- package/dist/components/data-display/label-value/LabelValue.cjs.js +1 -1
- package/dist/components/data-display/label-value/LabelValue.cjs.js.map +1 -1
- package/dist/components/data-display/label-value/LabelValue.es.js +1 -1
- package/dist/components/data-display/label-value/LabelValue.es.js.map +1 -1
- package/dist/components/floating-bar/FloatingBar.cjs.js +1 -1
- package/dist/components/floating-bar/FloatingBar.cjs.js.map +1 -1
- package/dist/components/floating-bar/FloatingBar.es.js +32 -29
- package/dist/components/floating-bar/FloatingBar.es.js.map +1 -1
- package/dist/components/forms/currency-input/CurrencyInputField.cjs.js +1 -1
- package/dist/components/forms/currency-input/CurrencyInputField.cjs.js.map +1 -1
- package/dist/components/forms/currency-input/CurrencyInputField.es.js +24 -24
- package/dist/components/forms/currency-input/CurrencyInputField.es.js.map +1 -1
- package/dist/components/forms/icon-picker/IconPicker.cjs.js +1 -1
- package/dist/components/forms/icon-picker/IconPicker.cjs.js.map +1 -1
- package/dist/components/forms/icon-picker/IconPicker.es.js +79 -65
- package/dist/components/forms/icon-picker/IconPicker.es.js.map +1 -1
- package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js +1 -1
- package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js.map +1 -1
- package/dist/components/forms/master-data-input/MasterDataInputField.es.js +2 -2
- package/dist/components/forms/master-data-input/MasterDataInputField.es.js.map +1 -1
- package/dist/components/forms/md-input/RichMarkdownInput.cjs.js +1 -1
- package/dist/components/forms/md-input/RichMarkdownInput.cjs.js.map +1 -1
- package/dist/components/forms/md-input/RichMarkdownInput.es.js +39 -38
- package/dist/components/forms/md-input/RichMarkdownInput.es.js.map +1 -1
- package/dist/components/icons/ShieldIcon.cjs.js +2 -0
- package/dist/components/icons/ShieldIcon.cjs.js.map +1 -0
- package/dist/components/icons/ShieldIcon.d.ts +20 -0
- package/dist/components/icons/ShieldIcon.es.js +30 -0
- package/dist/components/icons/ShieldIcon.es.js.map +1 -0
- package/dist/components/navigation/tabs/TabSwitch.cjs.js +1 -1
- package/dist/components/navigation/tabs/TabSwitch.cjs.js.map +1 -1
- package/dist/components/navigation/tabs/TabSwitch.d.ts +3 -1
- package/dist/components/navigation/tabs/TabSwitch.es.js +88 -67
- package/dist/components/navigation/tabs/TabSwitch.es.js.map +1 -1
- package/dist/components/navigation/tabs/Tabs.cjs.js +1 -1
- package/dist/components/navigation/tabs/Tabs.cjs.js.map +1 -1
- package/dist/components/navigation/tabs/Tabs.d.ts +1 -1
- package/dist/components/navigation/tabs/Tabs.es.js +339 -325
- package/dist/components/navigation/tabs/Tabs.es.js.map +1 -1
- package/dist/components/navigation/tabs/types.cjs.js.map +1 -1
- package/dist/components/navigation/tabs/types.d.ts +13 -0
- package/dist/components/navigation/tabs/types.es.js.map +1 -1
- package/dist/constants/colors.cjs.js +2 -0
- package/dist/constants/colors.cjs.js.map +1 -0
- package/dist/constants/colors.es.js +9 -0
- package/dist/constants/colors.es.js.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.es.js +325 -323
- package/dist/index.es.js.map +1 -1
- package/dist/providers/design-system-provider/types.d.ts +1 -0
- package/dist/utils/table.cjs.js +1 -1
- package/dist/utils/table.cjs.js.map +1 -1
- package/dist/utils/table.d.ts +1 -0
- package/dist/utils/table.es.js +26 -25
- package/dist/utils/table.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon rotate-12 text-inherit dark:text-inherit'/> : <PinIcon className='w-icon h-icon 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 className='w-icon h-icon' />}\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 className='w-icon h-icon 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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"}
|
|
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 lockedTabs,\n lockedTabTooltip,\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 /** A tab is locked when its name is listed in `lockedTabs` */\n const isTabLocked = useCallback(\n (tabName: T) => Boolean(lockedTabs?.includes(tabName)),\n [lockedTabs],\n );\n\n const handleSelectTab = (tabName: T) => {\n if (isTabLocked(tabName)) return;\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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon 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 className='w-icon h-icon rotate-12 text-inherit dark:text-inherit'/> : <PinIcon className='w-icon h-icon 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 className='w-icon h-icon' />}\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 className='w-icon h-icon 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 isLocked={isTabLocked(title)}\n lockedTooltip={lockedTabTooltip}\n href={isTabLocked(title) ? undefined : resolveTabHref(title)}\n onClick={!isDisabled && !isTabLocked(title) ? () => 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 isLocked={isTabLocked(name as T)}\n lockedTooltip={lockedTabTooltip}\n href={isTabLocked(name as T) ? undefined : 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 isLocked={isTabLocked(activeTab)}\n lockedTooltip={lockedTabTooltip}\n href={isTabLocked(activeTab) ? undefined : 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 const isLocked = isTabLocked(name as T);\n const isUnavailable = is_hidden || isLocked;\n\n return {\n key: name,\n label: (\n <OptionButton\n className={classNames(\n 'uppercase',\n isUnavailable\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={isUnavailable}\n onClick={isUnavailable ? 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 ],\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","lockedTabs","lockedTabTooltip","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","isTabLocked","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","isLocked","isUnavailable","trigger","MoreButton","TabOptions","TabDragOverlay"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.cjs.js","sources":["../../../../src/components/navigation/tabs/types.ts"],"sourcesContent":["import type{ ReactNode } from 'react';\n\nexport type TabVariant = 'default' | 'secondary' | 'switch';\n\nexport type TabSize = 'sm' | 'md' | '';\n\nexport type Tab<T extends string> = {\n name: T;\n is_default: boolean;\n is_hidden: boolean;\n is_pinned?: boolean;\n};\n\nexport type TabOptionConfig = {\n filterType: { label: string; value: 'contains' | 'does-not-contain' };\n sortOrder: 'default' | 'asc' | 'desc';\n showCounts: boolean;\n lockOrder: boolean;\n};\n\nexport type SuffixRecord<T extends string = string, V = string> = Record<T, V>;\n\nexport type TabsProps<T extends string> = {\n /** List of tab identifiers */\n tabs: readonly T[];\n /** Currently active tab */\n activeTab: T;\n /** Callback when a tab is clicked */\n onTabClick?(id: T): void;\n\n // ── Appearance ──\n /** Visual variant */\n variant?: TabVariant;\n /** Size of the tabs */\n size?: TabSize;\n /** Additional class name for the container */\n className?: string;\n /** Color scheme */\n color?: 'light' | 'dark';\n /** Height class for switch variant tabs */\n height?: string;\n /** Whether switch variant tabs should fill available width */\n fullWidth?: boolean;\n /** Whether to fit content width instead of full width */\n fitContentWidth?: boolean;\n /** Whether each tab should stretch equally */\n isFullWidth?: boolean;\n /** Disable framer-motion animations */\n disableAnimation?: boolean;\n /** Show loading skeleton */\n isLoading?: boolean;\n /** Disable all tab clicks */\n isDisabled?: boolean;\n /** Show tab options */\n showTabOptions?: boolean;\n\n // ── Tab content ──\n /** Icons to display inside tabs, keyed by tab name */\n tabIcons?: Record<string, ReactNode>;\n /** Suffix values (counts/badges) displayed next to tab names */\n suffixRecord?: SuffixRecord<T>;\n /** Count values for tabs */\n counts?: Record<T, number>;\n /** Show only icons, hide text labels */\n iconsOnly?: boolean;\n /** Tooltip text for individual tabs */\n tooltipTitle?: Record<string, string>;\n /** Title attribute for the tab container */\n title?: string;\n\n // ── Layout slots ──\n /** Custom component rendered on the right side of the tab bar */\n rightSection?: {\n className?: string;\n width: number;\n component: ReactNode;\n };\n\n // ── Interactive features (Phase 2+3) ──\n /** Enable drag-and-drop tab reordering */\n draggable?: boolean;\n /** Allow tabs to be pinned */\n allowPin?: boolean;\n /** Show all tabs without overflow truncation */\n showAllItems?: boolean;\n /** Show copy link option in tab context menu.\n * Automatically enabled when `linkConfig` is provided. */\n copyLink?: boolean;\n /** Callback when a tab is edited — when provided, shows an \"Edit\" option in the tab context menu */\n onEdit?(name: T): void;\n /** Callback when a tab is deleted */\n onDelete?(name: T): void;\n /** Called after the tab link is copied to the clipboard.\n * Receives the tab name and the full URL that was copied — useful for showing a toast or analytics. */\n onCopyLink?(name: T, href: string): void;\n\n // ── Provider-based persistence ──\n /** Redux/API persistence key — when provided and a DesignSystemProvider exists,\n * tab state is automatically loaded and persisted via the provider's tab config */\n tabKey?: string;\n /** URL sync config — when provided and a DesignSystemProvider exists,\n * clicking a tab updates the URL search param via the provider's navigate */\n linkConfig?: {\n key: string;\n defaultLink: string;\n /** Called with the URLSearchParams after the tab key is set — mutate to remove/add extra params before navigation */\n onResolve?(searchParams: URLSearchParams): void;\n };\n\n // ── Controlled state for external persistence ──\n /** Tabs with hidden state pre-configured (e.g. from API) */\n initialHiddenTabs?: readonly T[];\n /** Full tab state injected from external source (e.g. Redux/API) */\n initialTabs?: Tab<T>[];\n /** Tab option config injected from external source */\n tabConfig?: TabOptionConfig;\n /** Callback fired when tab option config changes (for external persistence) */\n onTabConfigChange?(config: TabOptionConfig): void;\n /** Callback fired when tabs array changes (reorder, hide, pin — for external persistence) */\n onTabsChange?(tabs: Tab<T>[]): void;\n /** Container element for the drag overlay portal */\n parentContainer?: HTMLElement | null;\n};\n\nexport type ChildrenProps = {\n isSelected?: boolean;\n selectedId?: string;\n selectedClassValue?: string;\n textClassValue?: string;\n children: ReactNode;\n disableAnimation?: boolean;\n};\n\nexport type TabSwitchProps = {\n title: string;\n icon?: ReactNode;\n suffixRecord?: SuffixRecord;\n classValue?: string;\n isSelected?: boolean;\n selectedClassValue?: string;\n textClassValue?: string;\n selectedId?: string;\n iconsOnly?: boolean;\n draggingTab?: boolean;\n disableAnimation?: boolean;\n tabOptions?: ReactNode;\n color?: 'light' | 'dark';\n showCounts?: boolean;\n /** When provided, renders as `<a>` instead of `<button>` for native link behaviour\n * (right-click → open in new tab, middle-click, Ctrl/Cmd+click). */\n href?: string;\n onClick?(): void;\n /** ARIA role override (defaults to 'tab' when used in a tablist) */\n role?: string;\n /** Whether this tab is selected (ARIA) */\n ariaSelected?: boolean;\n /** Tab index for roving tabindex pattern */\n tabIndex?: number;\n /** Keyboard handler for arrow key navigation */\n onKeyDown?: (e: React.KeyboardEvent) => void;\n};\n\nexport const INITIAL_TAB_OPTION_CONFIG: TabOptionConfig = {\n filterType: { label: 'Contains', value: 'contains' },\n sortOrder: 'default',\n showCounts: true,\n lockOrder: false,\n};\n"],"names":["INITIAL_TAB_OPTION_CONFIG"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.cjs.js","sources":["../../../../src/components/navigation/tabs/types.ts"],"sourcesContent":["import type{ ReactNode } from 'react';\n\nexport type TabVariant = 'default' | 'secondary' | 'switch';\n\nexport type TabSize = 'sm' | 'md' | '';\n\nexport type Tab<T extends string> = {\n name: T;\n is_default: boolean;\n is_hidden: boolean;\n is_pinned?: boolean;\n};\n\nexport type TabOptionConfig = {\n filterType: { label: string; value: 'contains' | 'does-not-contain' };\n sortOrder: 'default' | 'asc' | 'desc';\n showCounts: boolean;\n lockOrder: boolean;\n};\n\nexport type SuffixRecord<T extends string = string, V = string> = Record<T, V>;\n\nexport type TabsProps<T extends string> = {\n /** List of tab identifiers */\n tabs: readonly T[];\n /** Currently active tab */\n activeTab: T;\n /** Callback when a tab is clicked */\n onTabClick?(id: T): void;\n\n // ── Appearance ──\n /** Visual variant */\n variant?: TabVariant;\n /** Size of the tabs */\n size?: TabSize;\n /** Additional class name for the container */\n className?: string;\n /** Color scheme */\n color?: 'light' | 'dark';\n /** Height class for switch variant tabs */\n height?: string;\n /** Whether switch variant tabs should fill available width */\n fullWidth?: boolean;\n /** Whether to fit content width instead of full width */\n fitContentWidth?: boolean;\n /** Whether each tab should stretch equally */\n isFullWidth?: boolean;\n /** Disable framer-motion animations */\n disableAnimation?: boolean;\n /** Show loading skeleton */\n isLoading?: boolean;\n /** Disable all tab clicks */\n isDisabled?: boolean;\n /** Show tab options */\n showTabOptions?: boolean;\n\n // ── Access control ──\n /** Names of tabs the user cannot access. A locked tab shows a lock icon,\n * is not clickable and reveals a permission tooltip on hover.\n * Tabs not listed here are accessible. */\n lockedTabs?: readonly T[];\n /** Tooltip message shown when hovering a locked tab.\n * @default \"You don’t have the necessary permissions to access this content.\" */\n lockedTabTooltip?: string;\n\n // ── Tab content ──\n /** Icons to display inside tabs, keyed by tab name */\n tabIcons?: Record<string, ReactNode>;\n /** Suffix values (counts/badges) displayed next to tab names */\n suffixRecord?: SuffixRecord<T>;\n /** Count values for tabs */\n counts?: Record<T, number>;\n /** Show only icons, hide text labels */\n iconsOnly?: boolean;\n /** Tooltip text for individual tabs */\n tooltipTitle?: Record<string, string>;\n /** Title attribute for the tab container */\n title?: string;\n\n // ── Layout slots ──\n /** Custom component rendered on the right side of the tab bar */\n rightSection?: {\n className?: string;\n width: number;\n component: ReactNode;\n };\n\n // ── Interactive features (Phase 2+3) ──\n /** Enable drag-and-drop tab reordering */\n draggable?: boolean;\n /** Allow tabs to be pinned */\n allowPin?: boolean;\n /** Show all tabs without overflow truncation */\n showAllItems?: boolean;\n /** Show copy link option in tab context menu.\n * Automatically enabled when `linkConfig` is provided. */\n copyLink?: boolean;\n /** Callback when a tab is edited — when provided, shows an \"Edit\" option in the tab context menu */\n onEdit?(name: T): void;\n /** Callback when a tab is deleted */\n onDelete?(name: T): void;\n /** Called after the tab link is copied to the clipboard.\n * Receives the tab name and the full URL that was copied — useful for showing a toast or analytics. */\n onCopyLink?(name: T, href: string): void;\n\n // ── Provider-based persistence ──\n /** Redux/API persistence key — when provided and a DesignSystemProvider exists,\n * tab state is automatically loaded and persisted via the provider's tab config */\n tabKey?: string;\n /** URL sync config — when provided and a DesignSystemProvider exists,\n * clicking a tab updates the URL search param via the provider's navigate */\n linkConfig?: {\n key: string;\n defaultLink: string;\n /** Called with the URLSearchParams after the tab key is set — mutate to remove/add extra params before navigation */\n onResolve?(searchParams: URLSearchParams): void;\n };\n\n // ── Controlled state for external persistence ──\n /** Tabs with hidden state pre-configured (e.g. from API) */\n initialHiddenTabs?: readonly T[];\n /** Full tab state injected from external source (e.g. Redux/API) */\n initialTabs?: Tab<T>[];\n /** Tab option config injected from external source */\n tabConfig?: TabOptionConfig;\n /** Callback fired when tab option config changes (for external persistence) */\n onTabConfigChange?(config: TabOptionConfig): void;\n /** Callback fired when tabs array changes (reorder, hide, pin — for external persistence) */\n onTabsChange?(tabs: Tab<T>[]): void;\n /** Container element for the drag overlay portal */\n parentContainer?: HTMLElement | null;\n};\n\nexport type ChildrenProps = {\n isSelected?: boolean;\n selectedId?: string;\n selectedClassValue?: string;\n textClassValue?: string;\n children: ReactNode;\n disableAnimation?: boolean;\n};\n\nexport type TabSwitchProps = {\n title: string;\n icon?: ReactNode;\n suffixRecord?: SuffixRecord;\n classValue?: string;\n isSelected?: boolean;\n selectedClassValue?: string;\n textClassValue?: string;\n selectedId?: string;\n iconsOnly?: boolean;\n draggingTab?: boolean;\n disableAnimation?: boolean;\n tabOptions?: ReactNode;\n color?: 'light' | 'dark';\n showCounts?: boolean;\n /** Whether this tab is locked. When `true` the tab renders a lock icon,\n * ignores clicks and shows `lockedTooltip` on hover.\n * @default false */\n isLocked?: boolean;\n /** Tooltip message shown when the tab is locked */\n lockedTooltip?: string;\n /** When provided, renders as `<a>` instead of `<button>` for native link behaviour\n * (right-click → open in new tab, middle-click, Ctrl/Cmd+click). */\n href?: string;\n onClick?(): void;\n /** ARIA role override (defaults to 'tab' when used in a tablist) */\n role?: string;\n /** Whether this tab is selected (ARIA) */\n ariaSelected?: boolean;\n /** Tab index for roving tabindex pattern */\n tabIndex?: number;\n /** Keyboard handler for arrow key navigation */\n onKeyDown?: (e: React.KeyboardEvent) => void;\n};\n\nexport const INITIAL_TAB_OPTION_CONFIG: TabOptionConfig = {\n filterType: { label: 'Contains', value: 'contains' },\n sortOrder: 'default',\n showCounts: true,\n lockOrder: false,\n};\n"],"names":["INITIAL_TAB_OPTION_CONFIG"],"mappings":"gFAiLO,MAAMA,EAA6C,CACxD,WAAY,CAAE,MAAO,WAAY,MAAO,UAAA,EACxC,UAAW,UACX,WAAY,GACZ,UAAW,EACb"}
|
|
@@ -48,6 +48,13 @@ export type TabsProps<T extends string> = {
|
|
|
48
48
|
isDisabled?: boolean;
|
|
49
49
|
/** Show tab options */
|
|
50
50
|
showTabOptions?: boolean;
|
|
51
|
+
/** Names of tabs the user cannot access. A locked tab shows a lock icon,
|
|
52
|
+
* is not clickable and reveals a permission tooltip on hover.
|
|
53
|
+
* Tabs not listed here are accessible. */
|
|
54
|
+
lockedTabs?: readonly T[];
|
|
55
|
+
/** Tooltip message shown when hovering a locked tab.
|
|
56
|
+
* @default "You don’t have the necessary permissions to access this content." */
|
|
57
|
+
lockedTabTooltip?: string;
|
|
51
58
|
/** Icons to display inside tabs, keyed by tab name */
|
|
52
59
|
tabIcons?: Record<string, ReactNode>;
|
|
53
60
|
/** Suffix values (counts/badges) displayed next to tab names */
|
|
@@ -129,6 +136,12 @@ export type TabSwitchProps = {
|
|
|
129
136
|
tabOptions?: ReactNode;
|
|
130
137
|
color?: 'light' | 'dark';
|
|
131
138
|
showCounts?: boolean;
|
|
139
|
+
/** Whether this tab is locked. When `true` the tab renders a lock icon,
|
|
140
|
+
* ignores clicks and shows `lockedTooltip` on hover.
|
|
141
|
+
* @default false */
|
|
142
|
+
isLocked?: boolean;
|
|
143
|
+
/** Tooltip message shown when the tab is locked */
|
|
144
|
+
lockedTooltip?: string;
|
|
132
145
|
/** When provided, renders as `<a>` instead of `<button>` for native link behaviour
|
|
133
146
|
* (right-click → open in new tab, middle-click, Ctrl/Cmd+click). */
|
|
134
147
|
href?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.es.js","sources":["../../../../src/components/navigation/tabs/types.ts"],"sourcesContent":["import type{ ReactNode } from 'react';\n\nexport type TabVariant = 'default' | 'secondary' | 'switch';\n\nexport type TabSize = 'sm' | 'md' | '';\n\nexport type Tab<T extends string> = {\n name: T;\n is_default: boolean;\n is_hidden: boolean;\n is_pinned?: boolean;\n};\n\nexport type TabOptionConfig = {\n filterType: { label: string; value: 'contains' | 'does-not-contain' };\n sortOrder: 'default' | 'asc' | 'desc';\n showCounts: boolean;\n lockOrder: boolean;\n};\n\nexport type SuffixRecord<T extends string = string, V = string> = Record<T, V>;\n\nexport type TabsProps<T extends string> = {\n /** List of tab identifiers */\n tabs: readonly T[];\n /** Currently active tab */\n activeTab: T;\n /** Callback when a tab is clicked */\n onTabClick?(id: T): void;\n\n // ── Appearance ──\n /** Visual variant */\n variant?: TabVariant;\n /** Size of the tabs */\n size?: TabSize;\n /** Additional class name for the container */\n className?: string;\n /** Color scheme */\n color?: 'light' | 'dark';\n /** Height class for switch variant tabs */\n height?: string;\n /** Whether switch variant tabs should fill available width */\n fullWidth?: boolean;\n /** Whether to fit content width instead of full width */\n fitContentWidth?: boolean;\n /** Whether each tab should stretch equally */\n isFullWidth?: boolean;\n /** Disable framer-motion animations */\n disableAnimation?: boolean;\n /** Show loading skeleton */\n isLoading?: boolean;\n /** Disable all tab clicks */\n isDisabled?: boolean;\n /** Show tab options */\n showTabOptions?: boolean;\n\n // ── Tab content ──\n /** Icons to display inside tabs, keyed by tab name */\n tabIcons?: Record<string, ReactNode>;\n /** Suffix values (counts/badges) displayed next to tab names */\n suffixRecord?: SuffixRecord<T>;\n /** Count values for tabs */\n counts?: Record<T, number>;\n /** Show only icons, hide text labels */\n iconsOnly?: boolean;\n /** Tooltip text for individual tabs */\n tooltipTitle?: Record<string, string>;\n /** Title attribute for the tab container */\n title?: string;\n\n // ── Layout slots ──\n /** Custom component rendered on the right side of the tab bar */\n rightSection?: {\n className?: string;\n width: number;\n component: ReactNode;\n };\n\n // ── Interactive features (Phase 2+3) ──\n /** Enable drag-and-drop tab reordering */\n draggable?: boolean;\n /** Allow tabs to be pinned */\n allowPin?: boolean;\n /** Show all tabs without overflow truncation */\n showAllItems?: boolean;\n /** Show copy link option in tab context menu.\n * Automatically enabled when `linkConfig` is provided. */\n copyLink?: boolean;\n /** Callback when a tab is edited — when provided, shows an \"Edit\" option in the tab context menu */\n onEdit?(name: T): void;\n /** Callback when a tab is deleted */\n onDelete?(name: T): void;\n /** Called after the tab link is copied to the clipboard.\n * Receives the tab name and the full URL that was copied — useful for showing a toast or analytics. */\n onCopyLink?(name: T, href: string): void;\n\n // ── Provider-based persistence ──\n /** Redux/API persistence key — when provided and a DesignSystemProvider exists,\n * tab state is automatically loaded and persisted via the provider's tab config */\n tabKey?: string;\n /** URL sync config — when provided and a DesignSystemProvider exists,\n * clicking a tab updates the URL search param via the provider's navigate */\n linkConfig?: {\n key: string;\n defaultLink: string;\n /** Called with the URLSearchParams after the tab key is set — mutate to remove/add extra params before navigation */\n onResolve?(searchParams: URLSearchParams): void;\n };\n\n // ── Controlled state for external persistence ──\n /** Tabs with hidden state pre-configured (e.g. from API) */\n initialHiddenTabs?: readonly T[];\n /** Full tab state injected from external source (e.g. Redux/API) */\n initialTabs?: Tab<T>[];\n /** Tab option config injected from external source */\n tabConfig?: TabOptionConfig;\n /** Callback fired when tab option config changes (for external persistence) */\n onTabConfigChange?(config: TabOptionConfig): void;\n /** Callback fired when tabs array changes (reorder, hide, pin — for external persistence) */\n onTabsChange?(tabs: Tab<T>[]): void;\n /** Container element for the drag overlay portal */\n parentContainer?: HTMLElement | null;\n};\n\nexport type ChildrenProps = {\n isSelected?: boolean;\n selectedId?: string;\n selectedClassValue?: string;\n textClassValue?: string;\n children: ReactNode;\n disableAnimation?: boolean;\n};\n\nexport type TabSwitchProps = {\n title: string;\n icon?: ReactNode;\n suffixRecord?: SuffixRecord;\n classValue?: string;\n isSelected?: boolean;\n selectedClassValue?: string;\n textClassValue?: string;\n selectedId?: string;\n iconsOnly?: boolean;\n draggingTab?: boolean;\n disableAnimation?: boolean;\n tabOptions?: ReactNode;\n color?: 'light' | 'dark';\n showCounts?: boolean;\n /** When provided, renders as `<a>` instead of `<button>` for native link behaviour\n * (right-click → open in new tab, middle-click, Ctrl/Cmd+click). */\n href?: string;\n onClick?(): void;\n /** ARIA role override (defaults to 'tab' when used in a tablist) */\n role?: string;\n /** Whether this tab is selected (ARIA) */\n ariaSelected?: boolean;\n /** Tab index for roving tabindex pattern */\n tabIndex?: number;\n /** Keyboard handler for arrow key navigation */\n onKeyDown?: (e: React.KeyboardEvent) => void;\n};\n\nexport const INITIAL_TAB_OPTION_CONFIG: TabOptionConfig = {\n filterType: { label: 'Contains', value: 'contains' },\n sortOrder: 'default',\n showCounts: true,\n lockOrder: false,\n};\n"],"names":["INITIAL_TAB_OPTION_CONFIG"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.es.js","sources":["../../../../src/components/navigation/tabs/types.ts"],"sourcesContent":["import type{ ReactNode } from 'react';\n\nexport type TabVariant = 'default' | 'secondary' | 'switch';\n\nexport type TabSize = 'sm' | 'md' | '';\n\nexport type Tab<T extends string> = {\n name: T;\n is_default: boolean;\n is_hidden: boolean;\n is_pinned?: boolean;\n};\n\nexport type TabOptionConfig = {\n filterType: { label: string; value: 'contains' | 'does-not-contain' };\n sortOrder: 'default' | 'asc' | 'desc';\n showCounts: boolean;\n lockOrder: boolean;\n};\n\nexport type SuffixRecord<T extends string = string, V = string> = Record<T, V>;\n\nexport type TabsProps<T extends string> = {\n /** List of tab identifiers */\n tabs: readonly T[];\n /** Currently active tab */\n activeTab: T;\n /** Callback when a tab is clicked */\n onTabClick?(id: T): void;\n\n // ── Appearance ──\n /** Visual variant */\n variant?: TabVariant;\n /** Size of the tabs */\n size?: TabSize;\n /** Additional class name for the container */\n className?: string;\n /** Color scheme */\n color?: 'light' | 'dark';\n /** Height class for switch variant tabs */\n height?: string;\n /** Whether switch variant tabs should fill available width */\n fullWidth?: boolean;\n /** Whether to fit content width instead of full width */\n fitContentWidth?: boolean;\n /** Whether each tab should stretch equally */\n isFullWidth?: boolean;\n /** Disable framer-motion animations */\n disableAnimation?: boolean;\n /** Show loading skeleton */\n isLoading?: boolean;\n /** Disable all tab clicks */\n isDisabled?: boolean;\n /** Show tab options */\n showTabOptions?: boolean;\n\n // ── Access control ──\n /** Names of tabs the user cannot access. A locked tab shows a lock icon,\n * is not clickable and reveals a permission tooltip on hover.\n * Tabs not listed here are accessible. */\n lockedTabs?: readonly T[];\n /** Tooltip message shown when hovering a locked tab.\n * @default \"You don’t have the necessary permissions to access this content.\" */\n lockedTabTooltip?: string;\n\n // ── Tab content ──\n /** Icons to display inside tabs, keyed by tab name */\n tabIcons?: Record<string, ReactNode>;\n /** Suffix values (counts/badges) displayed next to tab names */\n suffixRecord?: SuffixRecord<T>;\n /** Count values for tabs */\n counts?: Record<T, number>;\n /** Show only icons, hide text labels */\n iconsOnly?: boolean;\n /** Tooltip text for individual tabs */\n tooltipTitle?: Record<string, string>;\n /** Title attribute for the tab container */\n title?: string;\n\n // ── Layout slots ──\n /** Custom component rendered on the right side of the tab bar */\n rightSection?: {\n className?: string;\n width: number;\n component: ReactNode;\n };\n\n // ── Interactive features (Phase 2+3) ──\n /** Enable drag-and-drop tab reordering */\n draggable?: boolean;\n /** Allow tabs to be pinned */\n allowPin?: boolean;\n /** Show all tabs without overflow truncation */\n showAllItems?: boolean;\n /** Show copy link option in tab context menu.\n * Automatically enabled when `linkConfig` is provided. */\n copyLink?: boolean;\n /** Callback when a tab is edited — when provided, shows an \"Edit\" option in the tab context menu */\n onEdit?(name: T): void;\n /** Callback when a tab is deleted */\n onDelete?(name: T): void;\n /** Called after the tab link is copied to the clipboard.\n * Receives the tab name and the full URL that was copied — useful for showing a toast or analytics. */\n onCopyLink?(name: T, href: string): void;\n\n // ── Provider-based persistence ──\n /** Redux/API persistence key — when provided and a DesignSystemProvider exists,\n * tab state is automatically loaded and persisted via the provider's tab config */\n tabKey?: string;\n /** URL sync config — when provided and a DesignSystemProvider exists,\n * clicking a tab updates the URL search param via the provider's navigate */\n linkConfig?: {\n key: string;\n defaultLink: string;\n /** Called with the URLSearchParams after the tab key is set — mutate to remove/add extra params before navigation */\n onResolve?(searchParams: URLSearchParams): void;\n };\n\n // ── Controlled state for external persistence ──\n /** Tabs with hidden state pre-configured (e.g. from API) */\n initialHiddenTabs?: readonly T[];\n /** Full tab state injected from external source (e.g. Redux/API) */\n initialTabs?: Tab<T>[];\n /** Tab option config injected from external source */\n tabConfig?: TabOptionConfig;\n /** Callback fired when tab option config changes (for external persistence) */\n onTabConfigChange?(config: TabOptionConfig): void;\n /** Callback fired when tabs array changes (reorder, hide, pin — for external persistence) */\n onTabsChange?(tabs: Tab<T>[]): void;\n /** Container element for the drag overlay portal */\n parentContainer?: HTMLElement | null;\n};\n\nexport type ChildrenProps = {\n isSelected?: boolean;\n selectedId?: string;\n selectedClassValue?: string;\n textClassValue?: string;\n children: ReactNode;\n disableAnimation?: boolean;\n};\n\nexport type TabSwitchProps = {\n title: string;\n icon?: ReactNode;\n suffixRecord?: SuffixRecord;\n classValue?: string;\n isSelected?: boolean;\n selectedClassValue?: string;\n textClassValue?: string;\n selectedId?: string;\n iconsOnly?: boolean;\n draggingTab?: boolean;\n disableAnimation?: boolean;\n tabOptions?: ReactNode;\n color?: 'light' | 'dark';\n showCounts?: boolean;\n /** Whether this tab is locked. When `true` the tab renders a lock icon,\n * ignores clicks and shows `lockedTooltip` on hover.\n * @default false */\n isLocked?: boolean;\n /** Tooltip message shown when the tab is locked */\n lockedTooltip?: string;\n /** When provided, renders as `<a>` instead of `<button>` for native link behaviour\n * (right-click → open in new tab, middle-click, Ctrl/Cmd+click). */\n href?: string;\n onClick?(): void;\n /** ARIA role override (defaults to 'tab' when used in a tablist) */\n role?: string;\n /** Whether this tab is selected (ARIA) */\n ariaSelected?: boolean;\n /** Tab index for roving tabindex pattern */\n tabIndex?: number;\n /** Keyboard handler for arrow key navigation */\n onKeyDown?: (e: React.KeyboardEvent) => void;\n};\n\nexport const INITIAL_TAB_OPTION_CONFIG: TabOptionConfig = {\n filterType: { label: 'Contains', value: 'contains' },\n sortOrder: 'default',\n showCounts: true,\n lockOrder: false,\n};\n"],"names":["INITIAL_TAB_OPTION_CONFIG"],"mappings":"AAiLO,MAAMA,IAA6C;AAAA,EACxD,YAAY,EAAE,OAAO,YAAY,OAAO,WAAA;AAAA,EACxC,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AACb;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.cjs.js","sources":["../../src/constants/colors.ts"],"sourcesContent":["/**\n * Color palette for tag components\n */\nexport const COLORS = {\n primary: {\n 50: '#E6F1FC',\n 100: '#C6E1F9',\n 200: '#8AC0F2',\n 300: '#54A4EC',\n 400: '#3392E9',\n 500: '#0077E3',\n 600: '#016DCF',\n 700: '#0054A1',\n 800: '#00417D',\n 900: '#00325F',\n 950: '#001c35',\n 975: '#00111f',\n },\n black: {\n 50: '#f0f0f0',\n 100: '#d9d9d9',\n 200: '#bfbfbf',\n 300: '#8c8c8c',\n 400: '#595959',\n 500: '#454545',\n 600: '#262626',\n 700: '#1f1f1f',\n 800: '#141414',\n 900: '#000000',\n 950: '#0a0a0a',\n 975: '#050505',\n },\n blue: {\n 50: '#E6F1FC',\n 100: '#C6E1F9',\n 200: '#8AC0F2',\n 300: '#54A4EC',\n 400: '#3392E9',\n 500: '#0077E3',\n 600: '#016DCF',\n 700: '#0054A1',\n 800: '#00417D',\n 900: '#00325F',\n 950: '#002547',\n 975: '#001529',\n },\n success: {\n 50: '#ECFDF3',\n 100: '#D1FADF',\n 200: '#A6F4C5',\n 300: '#6CE9A6',\n 400: '#32D583',\n 500: '#12B76A',\n 600: '#039855',\n 700: '#027A48',\n 800: '#05603A',\n 900: '#054F31',\n 950: '#033625',\n 975: '#022419',\n },\n neutral: {\n 50: '#F9FAFB',\n 100: '#F2F4F7',\n 200: '#EAECF0',\n 300: '#D0D5DD',\n 400: '#98A2B3',\n 500: '#667085',\n 600: '#475467',\n 700: '#344054',\n 800: '#1D2939',\n 900: '#101828',\n 950: '#0c1219',\n 975: '#080a0f',\n },\n error: {\n 50: '#FEF3F2',\n 100: '#FEE4E2',\n 200: '#FECDCA',\n 300: '#FDA29B',\n 400: '#F97066',\n 500: '#F04438',\n 600: '#D92D20',\n 700: '#B42318',\n 800: '#912018',\n 900: '#7A271A',\n 950: '#3d1008',\n 975: '#2a0b05',\n },\n warning: {\n 50: '#FFFAEB',\n 100: '#FEF0C7',\n 200: '#FEDF89',\n 300: '#FEC84B',\n 400: '#FDB022',\n 500: '#F79009',\n 600: '#DC6803',\n 700: '#B54708',\n 800: '#93370D',\n 900: '#7A2E0E',\n 950: '#662505',\n 975: '#451803',\n },\n teal: {\n 50: '#ebf5f5',\n 100: '#c2e0df',\n 200: '#a4d1d0',\n 300: '#7abcba',\n 400: '#61afad',\n 500: '#399b98',\n 600: '#348d8a',\n 700: '#286e6c',\n 800: '#1f5554',\n 900: '#184140',\n 950: '#133534',\n 975: '#0c2222',\n },\n green: {\n 50: '#f2f7f2',\n 100: '#d5e5d5',\n 200: '#c1d9c1',\n 300: '#a5c7a5',\n 400: '#94bd93',\n 500: '#79ac78',\n 600: '#6e9d6d',\n 700: '#567a55',\n 800: '#435f42',\n 900: '#334832',\n 950: '#001e00',\n 975: '#182818',\n },\n yellow: {\n 50: '#fffaed',\n 100: '#fff0c7',\n 200: '#ffe8ac',\n 300: '#ffde86',\n 400: '#ffd76f',\n 500: '#ffcd4b',\n 600: '#e8bb44',\n 700: '#b59235',\n 800: '#8c7129',\n 900: '#6b5620',\n 950: '#524314',\n 975: '#382e0e',\n },\n orange: {\n 50: '#fef4e8',\n 100: '#fddeb7',\n 200: '#fcce94',\n 300: '#fbb764',\n 400: '#faa945',\n 500: '#f99417',\n 600: '#e38715',\n 700: '#b16910',\n 800: '#89510d',\n 900: '#693e0a',\n 950: '#4d2d07',\n 975: '#331e05',\n },\n peach: {\n 50: '#fceef3',\n 100: '#f5cad9',\n 200: '#f0b0c6',\n 300: '#ea8cad',\n 400: '#e5759d',\n 500: '#df5384',\n 600: '#cb4c78',\n 700: '#9e3b5e',\n 800: '#7b2e49',\n 900: '#5e2337',\n 950: '#451a2b',\n 975: '#2e111d',\n },\n red: {\n 50: '#fceaeb',\n 100: '#f6bec0',\n 200: '#f29ea2',\n 300: '#ec7278',\n 400: '#e9575d',\n 500: '#e32d35',\n 600: '#cf2930',\n 700: '#a12026',\n 800: '#7d191d',\n 900: '#5f1316',\n 950: '#470c0f',\n 975: '#2f080a',\n },\n purple: {\n 50: '#f5e7ff',\n 100: '#dfb4ff',\n 200: '#d090ff',\n 300: '#bb5dff',\n 400: '#ad3dff',\n 500: '#990dff',\n 600: '#8b0ce8',\n 700: '#6d09b5',\n 800: '#54078c',\n 900: '#40056b',\n 950: '#300450',\n 975: '#200336',\n },\n navy: {\n 50: '#eaebf6',\n 100: '#bebfe2',\n 200: '#9ea1d3',\n 300: '#7276bf',\n 400: '#575bb3',\n 500: '#2d32a0',\n 600: '#292e92',\n 700: '#202472',\n 800: '#191c58',\n 900: '#131543',\n 950: '#0d0e2f',\n 975: '#090a20',\n },\n grey: {\n 50: '#f2f2f2',\n 100: '#d5d5d5',\n 200: '#c1c1c1',\n 300: '#a5a5a5',\n 400: '#939393',\n 500: '#787878',\n 600: '#6d6d6d',\n 700: '#555555',\n 800: '#424242',\n 900: '#323232',\n 950: '#252525',\n 975: '#191919',\n },\n} as const;\n\n/**\n * Available color names for tag components\n */\nexport const SELECT_COLORS = [\n { title: 'Blue', color: 'blue' },\n { title: 'Green', color: 'green' },\n { title: 'Teal', color: 'teal' },\n { title: 'Red', color: 'red' },\n { title: 'Yellow', color: 'yellow' },\n { title: 'Orange', color: 'orange' },\n { title: 'Peach', color: 'peach' },\n { title: 'Grey', color: 'grey' },\n { title: 'Purple', color: 'purple' },\n { title: 'Navy', color: 'navy' },\n] as const;\n"],"names":["COLORS"],"mappings":"gFAGO,MAAMA,EAAS,CAClB,QAAS,CAOL,IAAK,SAMT,CAmNJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.es.js","sources":["../../src/constants/colors.ts"],"sourcesContent":["/**\n * Color palette for tag components\n */\nexport const COLORS = {\n primary: {\n 50: '#E6F1FC',\n 100: '#C6E1F9',\n 200: '#8AC0F2',\n 300: '#54A4EC',\n 400: '#3392E9',\n 500: '#0077E3',\n 600: '#016DCF',\n 700: '#0054A1',\n 800: '#00417D',\n 900: '#00325F',\n 950: '#001c35',\n 975: '#00111f',\n },\n black: {\n 50: '#f0f0f0',\n 100: '#d9d9d9',\n 200: '#bfbfbf',\n 300: '#8c8c8c',\n 400: '#595959',\n 500: '#454545',\n 600: '#262626',\n 700: '#1f1f1f',\n 800: '#141414',\n 900: '#000000',\n 950: '#0a0a0a',\n 975: '#050505',\n },\n blue: {\n 50: '#E6F1FC',\n 100: '#C6E1F9',\n 200: '#8AC0F2',\n 300: '#54A4EC',\n 400: '#3392E9',\n 500: '#0077E3',\n 600: '#016DCF',\n 700: '#0054A1',\n 800: '#00417D',\n 900: '#00325F',\n 950: '#002547',\n 975: '#001529',\n },\n success: {\n 50: '#ECFDF3',\n 100: '#D1FADF',\n 200: '#A6F4C5',\n 300: '#6CE9A6',\n 400: '#32D583',\n 500: '#12B76A',\n 600: '#039855',\n 700: '#027A48',\n 800: '#05603A',\n 900: '#054F31',\n 950: '#033625',\n 975: '#022419',\n },\n neutral: {\n 50: '#F9FAFB',\n 100: '#F2F4F7',\n 200: '#EAECF0',\n 300: '#D0D5DD',\n 400: '#98A2B3',\n 500: '#667085',\n 600: '#475467',\n 700: '#344054',\n 800: '#1D2939',\n 900: '#101828',\n 950: '#0c1219',\n 975: '#080a0f',\n },\n error: {\n 50: '#FEF3F2',\n 100: '#FEE4E2',\n 200: '#FECDCA',\n 300: '#FDA29B',\n 400: '#F97066',\n 500: '#F04438',\n 600: '#D92D20',\n 700: '#B42318',\n 800: '#912018',\n 900: '#7A271A',\n 950: '#3d1008',\n 975: '#2a0b05',\n },\n warning: {\n 50: '#FFFAEB',\n 100: '#FEF0C7',\n 200: '#FEDF89',\n 300: '#FEC84B',\n 400: '#FDB022',\n 500: '#F79009',\n 600: '#DC6803',\n 700: '#B54708',\n 800: '#93370D',\n 900: '#7A2E0E',\n 950: '#662505',\n 975: '#451803',\n },\n teal: {\n 50: '#ebf5f5',\n 100: '#c2e0df',\n 200: '#a4d1d0',\n 300: '#7abcba',\n 400: '#61afad',\n 500: '#399b98',\n 600: '#348d8a',\n 700: '#286e6c',\n 800: '#1f5554',\n 900: '#184140',\n 950: '#133534',\n 975: '#0c2222',\n },\n green: {\n 50: '#f2f7f2',\n 100: '#d5e5d5',\n 200: '#c1d9c1',\n 300: '#a5c7a5',\n 400: '#94bd93',\n 500: '#79ac78',\n 600: '#6e9d6d',\n 700: '#567a55',\n 800: '#435f42',\n 900: '#334832',\n 950: '#001e00',\n 975: '#182818',\n },\n yellow: {\n 50: '#fffaed',\n 100: '#fff0c7',\n 200: '#ffe8ac',\n 300: '#ffde86',\n 400: '#ffd76f',\n 500: '#ffcd4b',\n 600: '#e8bb44',\n 700: '#b59235',\n 800: '#8c7129',\n 900: '#6b5620',\n 950: '#524314',\n 975: '#382e0e',\n },\n orange: {\n 50: '#fef4e8',\n 100: '#fddeb7',\n 200: '#fcce94',\n 300: '#fbb764',\n 400: '#faa945',\n 500: '#f99417',\n 600: '#e38715',\n 700: '#b16910',\n 800: '#89510d',\n 900: '#693e0a',\n 950: '#4d2d07',\n 975: '#331e05',\n },\n peach: {\n 50: '#fceef3',\n 100: '#f5cad9',\n 200: '#f0b0c6',\n 300: '#ea8cad',\n 400: '#e5759d',\n 500: '#df5384',\n 600: '#cb4c78',\n 700: '#9e3b5e',\n 800: '#7b2e49',\n 900: '#5e2337',\n 950: '#451a2b',\n 975: '#2e111d',\n },\n red: {\n 50: '#fceaeb',\n 100: '#f6bec0',\n 200: '#f29ea2',\n 300: '#ec7278',\n 400: '#e9575d',\n 500: '#e32d35',\n 600: '#cf2930',\n 700: '#a12026',\n 800: '#7d191d',\n 900: '#5f1316',\n 950: '#470c0f',\n 975: '#2f080a',\n },\n purple: {\n 50: '#f5e7ff',\n 100: '#dfb4ff',\n 200: '#d090ff',\n 300: '#bb5dff',\n 400: '#ad3dff',\n 500: '#990dff',\n 600: '#8b0ce8',\n 700: '#6d09b5',\n 800: '#54078c',\n 900: '#40056b',\n 950: '#300450',\n 975: '#200336',\n },\n navy: {\n 50: '#eaebf6',\n 100: '#bebfe2',\n 200: '#9ea1d3',\n 300: '#7276bf',\n 400: '#575bb3',\n 500: '#2d32a0',\n 600: '#292e92',\n 700: '#202472',\n 800: '#191c58',\n 900: '#131543',\n 950: '#0d0e2f',\n 975: '#090a20',\n },\n grey: {\n 50: '#f2f2f2',\n 100: '#d5d5d5',\n 200: '#c1c1c1',\n 300: '#a5a5a5',\n 400: '#939393',\n 500: '#787878',\n 600: '#6d6d6d',\n 700: '#555555',\n 800: '#424242',\n 900: '#323232',\n 950: '#252525',\n 975: '#191919',\n },\n} as const;\n\n/**\n * Available color names for tag components\n */\nexport const SELECT_COLORS = [\n { title: 'Blue', color: 'blue' },\n { title: 'Green', color: 'green' },\n { title: 'Teal', color: 'teal' },\n { title: 'Red', color: 'red' },\n { title: 'Yellow', color: 'yellow' },\n { title: 'Orange', color: 'orange' },\n { title: 'Peach', color: 'peach' },\n { title: 'Grey', color: 'grey' },\n { title: 'Purple', color: 'purple' },\n { title: 'Navy', color: 'navy' },\n] as const;\n"],"names":["COLORS"],"mappings":"AAGO,MAAMA,IAAS;AAAA,EAClB,SAAS;AAAA,IAOL,KAAK;AAAA,EAMT;AAmNJ;"}
|