@humain/ui 2.2.4 → 2.2.6
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/index11.js +4 -4
- package/dist/index11.js.map +1 -1
- package/dist/index110.js +4 -4
- package/dist/index110.js.map +1 -1
- package/dist/index134.js +4 -4
- package/dist/index134.js.map +1 -1
- package/dist/index135.js +2 -2
- package/dist/index135.js.map +1 -1
- package/dist/index151.js +3 -3
- package/dist/index151.js.map +1 -1
- package/dist/index152.js +1 -1
- package/dist/index152.js.map +1 -1
- package/dist/index155.js +1 -1
- package/dist/index155.js.map +1 -1
- package/dist/index188.js +4 -4
- package/dist/index188.js.map +1 -1
- package/dist/index201.js +1 -1
- package/dist/index201.js.map +1 -1
- package/dist/index228.js +1 -1
- package/dist/index228.js.map +1 -1
- package/dist/index24.js +1 -1
- package/dist/index24.js.map +1 -1
- package/dist/index25.js +4 -4
- package/dist/index25.js.map +1 -1
- package/dist/index39.js +2 -2
- package/dist/index39.js.map +1 -1
- package/dist/index5.js +8 -8
- package/dist/index5.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/wc/AIScrollButton.js +8 -8
- package/dist/wc/AIScrollButton.js.map +1 -1
- package/dist/wc/Badge.js +9 -9
- package/dist/wc/Badge.js.map +1 -1
- package/dist/wc/Checkbox.js +22 -22
- package/dist/wc/Checkbox.js.map +1 -1
- package/dist/wc/Pagination.js +4 -4
- package/dist/wc/Pagination.js.map +1 -1
- package/dist/wc/Switch.js +23 -23
- package/dist/wc/Switch.js.map +1 -1
- package/dist/wc/Tabs.js +110 -110
- package/dist/wc/Tabs.js.map +1 -1
- package/dist/wc/Tooltip.js +28 -28
- package/dist/wc/Tooltip.js.map +1 -1
- package/dist/wc/button.js +33 -33
- package/dist/wc/button.js.map +1 -1
- package/dist/wc/hf-alert.js +10 -10
- package/dist/wc/hf-alert.js.map +1 -1
- package/dist/wc/hf-nav-account-menu.js +8 -8
- package/dist/wc/hf-nav-account-menu.js.map +1 -1
- package/dist/wc/hf-steps.js +8 -8
- package/dist/wc/hf-steps.js.map +1 -1
- package/dist/wc/markdown-renderer.js +4 -4
- package/dist/wc/markdown-renderer.js.map +1 -1
- package/dist/wc/selection-group.js +6 -6
- package/dist/wc/selection-group.js.map +1 -1
- package/dist/wc-react/AIScrollButton.js +18 -18
- package/dist/wc-react/AIScrollButton.js.map +1 -1
- package/dist/wc-react/Badge.js +16 -16
- package/dist/wc-react/Badge.js.map +1 -1
- package/dist/wc-react/Checkbox.js +14 -14
- package/dist/wc-react/Checkbox.js.map +1 -1
- package/dist/wc-react/Pagination.js +130 -130
- package/dist/wc-react/Pagination.js.map +1 -1
- package/dist/wc-react/Switch.js +2 -2
- package/dist/wc-react/Switch.js.map +1 -1
- package/dist/wc-react/Tabs.js +38 -38
- package/dist/wc-react/Tabs.js.map +1 -1
- package/dist/wc-react/Tooltip.js +22 -22
- package/dist/wc-react/Tooltip.js.map +1 -1
- package/dist/wc-react/button.js +8 -8
- package/dist/wc-react/button.js.map +1 -1
- package/dist/wc-react/hf-alert.js +28 -28
- package/dist/wc-react/hf-alert.js.map +1 -1
- package/dist/wc-react/hf-nav-account-menu.js +7 -7
- package/dist/wc-react/hf-nav-account-menu.js.map +1 -1
- package/dist/wc-react/hf-steps.js +16 -16
- package/dist/wc-react/hf-steps.js.map +1 -1
- package/dist/wc-react/markdown-renderer.js +4 -4
- package/dist/wc-react/markdown-renderer.js.map +1 -1
- package/dist/wc-react/selection-group.js +1 -1
- package/dist/wc-react/selection-group.js.map +1 -1
- package/package.json +1 -1
- package/skills/humain-ui/SKILL.md +1 -1
- package/skills/humain-ui/references/foundations.md +1 -1
- package/skills/humain-ui-wc/SKILL.md +1 -1
- package/skills/humain-ui-wc.skill +0 -0
- package/skills/humain-ui.skill +0 -0
- package/src/tokens.css +14 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","names":["React","React","_formatErrorMessage","TabsRoot","React","REASONS.missing","REASONS.initial","REASONS.disabled","React","_formatErrorMessage","React","REASONS.none","stateAttributesMapping","TabsIndicator","React","React","TabsList","React"],"sources":["../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+utils@0.3.1+5d66306c8bc7085f/node_modules/@base-ui/utils/useForcedRerendering.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/utils/getCssDimensions.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/root/TabsRootContext.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/root/TabsRootDataAttributes.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/root/stateAttributesMapping.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/root/TabsRoot.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/list/TabsListContext.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/tab/TabsTab.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/indicator/prehydrationScript.min.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/indicator/TabsIndicatorCssVars.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/indicator/TabsIndicator.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/panel/TabsPanelDataAttributes.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/panel/TabsPanel.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/list/TabsList.mjs","../../src/components/ui/tabs.tsx","../../src/components/molecules/navigation/Tabs/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n/**\n * Returns a function that forces a rerender.\n */\nexport function useForcedRerendering() {\n const [, setState] = React.useState({});\n return React.useCallback(() => {\n setState({});\n }, []);\n}","import { round } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement } from '@floating-ui/utils/dom';\nexport function getCssDimensions(element) {\n const css = getComputedStyle(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height\n };\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\n/**\n * @internal\n */\nexport const TabsRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") TabsRootContext.displayName = \"TabsRootContext\";\nexport function useTabsRootContext() {\n const context = React.useContext(TabsRootContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: TabsRootContext is missing. Tabs parts must be placed within <Tabs.Root>.' : _formatErrorMessage(64));\n }\n return context;\n}","export let TabsRootDataAttributes = /*#__PURE__*/function (TabsRootDataAttributes) {\n /**\n * Indicates the direction of the activation (based on the previous active tab).\n * @type {'left' | 'right' | 'up' | 'down' | 'none'}\n */\n TabsRootDataAttributes[\"activationDirection\"] = \"data-activation-direction\";\n /**\n * Indicates the orientation of the tabs.\n * @type {'horizontal' | 'vertical'}\n */\n TabsRootDataAttributes[\"orientation\"] = \"data-orientation\";\n return TabsRootDataAttributes;\n}({});","import { TabsRootDataAttributes } from \"./TabsRootDataAttributes.mjs\";\nexport const tabsStateAttributesMapping = {\n tabActivationDirection: dir => ({\n [TabsRootDataAttributes.activationDirection]: dir\n })\n};","'use client';\n\nimport * as React from 'react';\nimport { useControlled } from '@base-ui/utils/useControlled';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { CompositeList } from \"../../internals/composite/list/CompositeList.mjs\";\nimport { TabsRootContext } from \"./TabsRootContext.mjs\";\nimport { tabsStateAttributesMapping } from \"./stateAttributesMapping.mjs\";\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\n\n/**\n * Groups the tabs and the corresponding panels.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const TabsRoot = /*#__PURE__*/React.forwardRef(function TabsRoot(componentProps, forwardedRef) {\n const {\n className,\n defaultValue: defaultValueProp = 0,\n onValueChange: onValueChangeProp,\n orientation = 'horizontal',\n render,\n value: valueProp,\n style,\n ...elementProps\n } = componentProps;\n\n // Track whether the user explicitly provided a defined `defaultValue` prop.\n // Used to determine if we should honor a disabled tab selection.\n const hasExplicitDefaultValueProp = componentProps.defaultValue !== undefined;\n const tabPanelRefs = React.useRef([]);\n const [mountedTabPanels, setMountedTabPanels] = React.useState(() => new Map());\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValueProp,\n name: 'Tabs',\n state: 'value'\n });\n const isControlled = valueProp !== undefined;\n const [tabMap, setTabMap] = React.useState(() => new Map());\n const lastKnownTabElementRef = React.useRef(undefined);\n\n // Used for activation direction detection via tab element positions.\n const getTabElementBySelectedValue = React.useCallback(selectedValue => {\n if (selectedValue === undefined) {\n return null;\n }\n for (const [tabElement, tabMetadata] of tabMap.entries()) {\n if (tabMetadata != null && selectedValue === (tabMetadata.value ?? tabMetadata.index)) {\n return tabElement;\n }\n }\n return null;\n }, [tabMap]);\n const [activationDirectionState, setActivationDirectionState] = React.useState(() => ({\n previousValue: value,\n tabActivationDirection: 'none'\n }));\n const {\n previousValue,\n tabActivationDirection: committedTabActivationDirection\n } = activationDirectionState;\n let tabActivationDirection = committedTabActivationDirection;\n let directionComputationIncomplete = false;\n\n // Compute activation direction during render when value changes so children see\n // the correct direction on their very first render after the selection update.\n // The previous value snapshot is stored in state and synced after commit.\n // https://github.com/mui/base-ui/issues/3873\n if (previousValue !== value) {\n tabActivationDirection = computeActivationDirection(previousValue, value, orientation, tabMap);\n\n // When a new tab is added and selected in the same controlled update,\n // the tab element may not yet be registered in tabMap, so direction was\n // computed from a value-based fallback. Keep the previous value snapshot\n // stale so we re-compute from DOM positions once tabMap is up to date.\n directionComputationIncomplete = previousValue != null && value != null && getTabElementBySelectedValue(value) == null;\n }\n const nextPreviousValue = directionComputationIncomplete ? previousValue : value;\n const shouldSyncActivationDirectionState = previousValue !== nextPreviousValue || committedTabActivationDirection !== tabActivationDirection;\n useIsoLayoutEffect(() => {\n if (!shouldSyncActivationDirectionState) {\n return;\n }\n setActivationDirectionState({\n previousValue: nextPreviousValue,\n tabActivationDirection\n });\n }, [nextPreviousValue, shouldSyncActivationDirectionState, tabActivationDirection]);\n const onValueChange = useStableCallback((newValue, eventDetails) => {\n const activationDirection = computeActivationDirection(value, newValue, orientation, tabMap);\n eventDetails.activationDirection = activationDirection;\n onValueChangeProp?.(newValue, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n setValue(newValue);\n });\n const notifyAutomaticValueChange = useStableCallback((nextValue, reason) => {\n onValueChangeProp?.(nextValue, createChangeEventDetails(reason, undefined, undefined, {\n activationDirection: 'none'\n }));\n });\n const registerMountedTabPanel = useStableCallback((panelValue, panelId) => {\n setMountedTabPanels(prev => {\n if (prev.get(panelValue) === panelId) {\n return prev;\n }\n const next = new Map(prev);\n next.set(panelValue, panelId);\n return next;\n });\n });\n const unregisterMountedTabPanel = useStableCallback((panelValue, panelId) => {\n setMountedTabPanels(prev => {\n if (!prev.has(panelValue) || prev.get(panelValue) !== panelId) {\n return prev;\n }\n const next = new Map(prev);\n next.delete(panelValue);\n return next;\n });\n });\n\n // get the `id` attribute of <Tabs.Panel> to set as the value of `aria-controls` on <Tabs.Tab>\n const getTabPanelIdByValue = React.useCallback(tabValue => {\n return mountedTabPanels.get(tabValue);\n }, [mountedTabPanels]);\n\n // get the `id` attribute of <Tabs.Tab> to set as the value of `aria-labelledby` on <Tabs.Panel>\n const getTabIdByPanelValue = React.useCallback(tabPanelValue => {\n for (const tabMetadata of tabMap.values()) {\n if (tabPanelValue === tabMetadata?.value) {\n return tabMetadata?.id;\n }\n }\n return undefined;\n }, [tabMap]);\n const tabsContextValue = React.useMemo(() => ({\n getTabElementBySelectedValue,\n getTabIdByPanelValue,\n getTabPanelIdByValue,\n onValueChange,\n orientation,\n registerMountedTabPanel,\n setTabMap,\n unregisterMountedTabPanel,\n tabActivationDirection,\n value\n }), [getTabElementBySelectedValue, getTabIdByPanelValue, getTabPanelIdByValue, onValueChange, orientation, registerMountedTabPanel, setTabMap, unregisterMountedTabPanel, tabActivationDirection, value]);\n const selectedTabMetadata = React.useMemo(() => {\n for (const tabMetadata of tabMap.values()) {\n if (tabMetadata != null && tabMetadata.value === value) {\n return tabMetadata;\n }\n }\n return undefined;\n }, [tabMap, value]);\n\n // Find the first non-disabled tab value.\n // Used as a fallback when the current selection is disabled or missing.\n const firstEnabledTabValue = React.useMemo(() => {\n for (const tabMetadata of tabMap.values()) {\n if (tabMetadata != null && !tabMetadata.disabled) {\n return tabMetadata.value;\n }\n }\n return undefined;\n }, [tabMap]);\n\n // Implicit uncontrolled selections are still automatic changes, so notify\n // once when the tabs first register. Explicit defaults are treated as user-owned.\n const shouldNotifyInitialValueChangeRef = React.useRef(!hasExplicitDefaultValueProp);\n // useControlled warns if defaultValue changes after mount, but the\n // disabled-default honor policy below still needs a stable initial value.\n const initialDefaultValueRef = React.useRef(defaultValueProp);\n // An explicit defaultValue can intentionally point at a disabled tab on mount.\n // Once that selection becomes valid, later disabled states should fall back.\n const shouldHonorDisabledDefaultValueRef = React.useRef(hasExplicitDefaultValueProp);\n const didRegisterTabsRef = React.useRef(false);\n\n // Uncontrolled roots own automatic fallback. Controlled roots keep the exact\n // value supplied by the parent, even when that tab is disabled or missing.\n useIsoLayoutEffect(() => {\n if (isControlled) {\n return;\n }\n function commitAutomaticValueChange(fallbackValue, fallbackReason) {\n setValue(fallbackValue);\n // Automatic fallbacks are not directional transitions; reset the direction\n // alongside the value so the batched commit keeps both in sync.\n setActivationDirectionState(prev => {\n if (prev.previousValue === fallbackValue && prev.tabActivationDirection === 'none') {\n return prev;\n }\n return {\n previousValue: fallbackValue,\n tabActivationDirection: 'none'\n };\n });\n notifyAutomaticValueChange(fallbackValue, fallbackReason);\n // Mark the initial notification as delivered only after the consumer\n // callback returns. The fallback value is queued first so automatic\n // consistency updates are not cancelable through a throwing handler.\n shouldNotifyInitialValueChangeRef.current = false;\n }\n if (tabMap.size === 0) {\n // A Suspense boundary outside the root can clean up layout effects while\n // keeping the previous tabs connected. Don't treat that as removal.\n if (didRegisterTabsRef.current && value !== null && !lastKnownTabElementRef.current?.isConnected) {\n commitAutomaticValueChange(null, REASONS.missing);\n }\n return;\n }\n didRegisterTabsRef.current = true;\n lastKnownTabElementRef.current = tabMap.keys().next().value;\n const selectionIsDisabled = selectedTabMetadata?.disabled;\n const selectionIsMissing = selectedTabMetadata == null && value !== null;\n if (!selectionIsDisabled && value === initialDefaultValueRef.current) {\n shouldHonorDisabledDefaultValueRef.current = false;\n }\n if (shouldHonorDisabledDefaultValueRef.current && selectionIsDisabled && value === initialDefaultValueRef.current) {\n return;\n }\n const shouldNotifyInitialValueChange = shouldNotifyInitialValueChangeRef.current;\n if (selectionIsDisabled || selectionIsMissing) {\n const fallbackValue = firstEnabledTabValue ?? null;\n if (value === fallbackValue) {\n // Already at the fallback value; no commit or notification needed,\n // but record that the implicit-initial transition has resolved.\n shouldNotifyInitialValueChangeRef.current = false;\n return;\n }\n let fallbackReason = REASONS.missing;\n if (shouldNotifyInitialValueChange) {\n fallbackReason = REASONS.initial;\n } else if (selectionIsDisabled) {\n fallbackReason = REASONS.disabled;\n }\n commitAutomaticValueChange(fallbackValue, fallbackReason);\n return;\n }\n if (shouldNotifyInitialValueChange && selectedTabMetadata != null) {\n notifyAutomaticValueChange(value, REASONS.initial);\n shouldNotifyInitialValueChangeRef.current = false;\n }\n }, [firstEnabledTabValue, isControlled, notifyAutomaticValueChange, selectedTabMetadata, setValue, tabMap, value]);\n const state = {\n orientation,\n tabActivationDirection\n };\n const element = useRenderElement('div', componentProps, {\n state,\n ref: forwardedRef,\n props: elementProps,\n stateAttributesMapping: tabsStateAttributesMapping\n });\n return /*#__PURE__*/_jsx(TabsRootContext.Provider, {\n value: tabsContextValue,\n children: /*#__PURE__*/_jsx(CompositeList, {\n elementsRef: tabPanelRefs,\n children: element\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") TabsRoot.displayName = \"TabsRoot\";\nfunction computeActivationDirection(oldValue, newValue, orientation, tabMap) {\n if (oldValue == null || newValue == null) {\n return 'none';\n }\n let oldTab = null;\n let newTab = null;\n for (const [tabElement, tabMetadata] of tabMap.entries()) {\n if (tabMetadata == null) {\n continue;\n }\n const tabValue = tabMetadata.value ?? tabMetadata.index;\n if (oldValue === tabValue) {\n oldTab = tabElement;\n }\n if (newValue === tabValue) {\n newTab = tabElement;\n }\n if (oldTab != null && newTab != null) {\n break;\n }\n }\n if (oldTab == null || newTab == null) {\n // Fallback for dynamic tabs: when a tab element isn't registered yet\n // (e.g. added and selected in the same update), infer direction from\n // the values themselves. Works for comparable types (numbers, strings).\n if (oldTab !== newTab && (typeof oldValue === 'number' || typeof oldValue === 'string') && typeof oldValue === typeof newValue) {\n if (orientation === 'horizontal') {\n return newValue > oldValue ? 'right' : 'left';\n }\n return newValue > oldValue ? 'down' : 'up';\n }\n return 'none';\n }\n const oldRect = oldTab.getBoundingClientRect();\n const newRect = newTab.getBoundingClientRect();\n if (orientation === 'horizontal') {\n if (newRect.left < oldRect.left) {\n return 'left';\n }\n if (newRect.left > oldRect.left) {\n return 'right';\n }\n } else {\n if (newRect.top < oldRect.top) {\n return 'up';\n }\n if (newRect.top > oldRect.top) {\n return 'down';\n }\n }\n return 'none';\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const TabsListContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") TabsListContext.displayName = \"TabsListContext\";\nexport function useTabsListContext() {\n const context = React.useContext(TabsListContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: TabsListContext is missing. TabsList parts must be placed within <Tabs.List>.' : _formatErrorMessage(65));\n }\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { ownerDocument } from '@base-ui/utils/owner';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useButton } from \"../../internals/use-button/index.mjs\";\nimport { ACTIVE_COMPOSITE_ITEM } from \"../../internals/composite/constants.mjs\";\nimport { useCompositeItem } from \"../../internals/composite/item/useCompositeItem.mjs\";\nimport { useTabsRootContext } from \"../root/TabsRootContext.mjs\";\nimport { tabsStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useTabsListContext } from \"../list/TabsListContext.mjs\";\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\nimport { activeElement, contains } from \"../../floating-ui-react/utils.mjs\";\n\n/**\n * An individual interactive tab button that toggles the corresponding panel.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nexport const TabsTab = /*#__PURE__*/React.forwardRef(function TabsTab(componentProps, forwardedRef) {\n const {\n className,\n disabled = false,\n render,\n value,\n id: idProp,\n nativeButton = true,\n style,\n ...elementProps\n } = componentProps;\n const {\n value: activeTabValue,\n getTabPanelIdByValue,\n orientation,\n tabActivationDirection\n } = useTabsRootContext();\n const {\n activateOnFocus,\n highlightedTabIndex,\n onTabActivation,\n registerTabResizeObserverElement,\n setHighlightedTabIndex,\n tabsListElement\n } = useTabsListContext();\n const id = useBaseUiId(idProp);\n const tabMetadata = React.useMemo(() => ({\n disabled,\n id,\n value\n }), [disabled, id, value]);\n const {\n compositeProps,\n compositeRef,\n index\n // hook is used instead of the CompositeItem component\n // because the index is needed for Tab internals\n } = useCompositeItem({\n metadata: tabMetadata\n });\n const active = value === activeTabValue;\n const isNavigatingRef = React.useRef(false);\n const tabElementRef = React.useRef(null);\n useIsoLayoutEffect(() => {\n const tabElement = tabElementRef.current;\n if (!tabElement) {\n return undefined;\n }\n return registerTabResizeObserverElement(tabElement);\n }, [registerTabResizeObserverElement]);\n\n // Keep the highlighted item in sync with the currently active tab\n // when the value prop changes externally (controlled mode)\n useIsoLayoutEffect(() => {\n if (isNavigatingRef.current) {\n isNavigatingRef.current = false;\n return;\n }\n if (!(active && index > -1 && highlightedTabIndex !== index)) {\n return;\n }\n\n // If focus is currently within the tabs list, don't override the roving\n // focus highlight. This keeps keyboard navigation relative to the focused\n // item after an external/asynchronous selection change.\n const listElement = tabsListElement;\n if (listElement != null) {\n const activeEl = activeElement(ownerDocument(listElement));\n if (activeEl && contains(listElement, activeEl)) {\n return;\n }\n }\n\n // Don't highlight disabled tabs to prevent them from interfering with keyboard navigation.\n // Keyboard focus (tabIndex) should remain on an enabled tab even when a disabled tab is selected.\n if (!disabled) {\n setHighlightedTabIndex(index);\n }\n }, [active, index, highlightedTabIndex, setHighlightedTabIndex, disabled, tabsListElement]);\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton,\n focusableWhenDisabled: true\n });\n const tabPanelId = getTabPanelIdByValue(value);\n const isPressingRef = React.useRef(false);\n const isMainButtonRef = React.useRef(false);\n function onClick(event) {\n if (active || disabled) {\n return;\n }\n onTabActivation(value, createChangeEventDetails(REASONS.none, event.nativeEvent, undefined, {\n activationDirection: 'none'\n }));\n }\n function onFocus(event) {\n if (active) {\n return;\n }\n\n // Only highlight enabled tabs when focused (disabled tabs remain focusable via focusableWhenDisabled).\n if (index > -1 && !disabled) {\n setHighlightedTabIndex(index);\n }\n if (disabled) {\n return;\n }\n if (activateOnFocus && (!isPressingRef.current ||\n // keyboard or touch focus\n isPressingRef.current && isMainButtonRef.current) // mouse focus\n ) {\n onTabActivation(value, createChangeEventDetails(REASONS.none, event.nativeEvent, undefined, {\n activationDirection: 'none'\n }));\n }\n }\n function onPointerDown(event) {\n if (active || disabled) {\n return;\n }\n isPressingRef.current = true;\n function handlePointerUp() {\n isPressingRef.current = false;\n isMainButtonRef.current = false;\n }\n if (!event.button || event.button === 0) {\n isMainButtonRef.current = true;\n const doc = ownerDocument(event.currentTarget);\n doc.addEventListener('pointerup', handlePointerUp, {\n once: true\n });\n }\n }\n const state = {\n disabled,\n active,\n orientation,\n tabActivationDirection\n };\n const element = useRenderElement('button', componentProps, {\n state,\n ref: [forwardedRef, buttonRef, compositeRef, tabElementRef],\n props: [compositeProps, {\n role: 'tab',\n 'aria-controls': tabPanelId,\n 'aria-selected': active,\n id,\n onClick,\n onFocus,\n onPointerDown,\n [ACTIVE_COMPOSITE_ITEM]: active ? '' : undefined,\n onKeyDownCapture() {\n isNavigatingRef.current = true;\n }\n }, elementProps, getButtonProps],\n stateAttributesMapping: tabsStateAttributesMapping\n });\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") TabsTab.displayName = \"TabsTab\";","// This file is autogenerated. Do not edit it directly.\n// To update it, modify the corresponding source file and run `pnpm inline-scripts`.\n\n// prettier-ignore\nexport const script = '!function(){const t=document.currentScript.previousElementSibling;if(!t)return;const e=t.closest(\\'[role=\"tablist\"]\\');if(!e)return;const i=e.querySelector(\"[data-active]\");if(!i)return;if(0===i.offsetWidth||0===e.offsetWidth)return;let o=0,n=0,h=0,l=0,r=0,f=0;function s(t){const e=getComputedStyle(t);let i=parseFloat(e.width)||0,o=parseFloat(e.height)||0;return(Math.round(i)!==t.offsetWidth||Math.round(o)!==t.offsetHeight)&&(i=t.offsetWidth,o=t.offsetHeight),{width:i,height:o}}if(null!=i&&null!=e){const{width:t,height:c}=s(i),{width:u,height:d}=s(e),a=i.getBoundingClientRect(),g=e.getBoundingClientRect(),p=u>0?g.width/u:1,b=d>0?g.height/d:1;if(Math.abs(p)>Number.EPSILON&&Math.abs(b)>Number.EPSILON){const t=a.left-g.left,i=a.top-g.top;o=t/p+e.scrollLeft-e.clientLeft,h=i/b+e.scrollTop-e.clientTop}else o=i.offsetLeft,h=i.offsetTop;r=t,f=c,n=e.scrollWidth-o-r,l=e.scrollHeight-h-f}function c(e,i){t.style.setProperty(`--active-tab-${e}`,`${i}px`)}c(\"left\",o),c(\"right\",n),c(\"top\",h),c(\"bottom\",l),c(\"width\",r),c(\"height\",f),r>0&&f>0&&t.removeAttribute(\"hidden\")}();';","export let TabsIndicatorCssVars = /*#__PURE__*/function (TabsIndicatorCssVars) {\n /**\n * Indicates the distance on the left side from the parent's container if the tab is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabLeft\"] = \"--active-tab-left\";\n /**\n * Indicates the distance on the right side from the parent's container if the tab is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabRight\"] = \"--active-tab-right\";\n /**\n * Indicates the distance on the top side from the parent's container if the tab is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabTop\"] = \"--active-tab-top\";\n /**\n * Indicates the distance on the bottom side from the parent's container if the tab is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabBottom\"] = \"--active-tab-bottom\";\n /**\n * Indicates the width of the tab if it is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabWidth\"] = \"--active-tab-width\";\n /**\n * Indicates the height of the tab if it is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabHeight\"] = \"--active-tab-height\";\n return TabsIndicatorCssVars;\n}({});","'use client';\n\nimport * as React from 'react';\nimport { useForcedRerendering } from '@base-ui/utils/useForcedRerendering';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { getCssDimensions } from \"../../utils/getCssDimensions.mjs\";\nimport { useIsHydrating } from \"../../utils/useIsHydrating.mjs\";\nimport { useTabsRootContext } from \"../root/TabsRootContext.mjs\";\nimport { tabsStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useTabsListContext } from \"../list/TabsListContext.mjs\";\nimport { script as prehydrationScript } from \"./prehydrationScript.min.mjs\";\nimport { TabsIndicatorCssVars } from \"./TabsIndicatorCssVars.mjs\";\nimport { useCSPContext } from \"../../internals/csp-context/CSPContext.mjs\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst stateAttributesMapping = {\n ...tabsStateAttributesMapping,\n activeTabPosition: () => null,\n activeTabSize: () => null\n};\n\n/**\n * A visual indicator that can be styled to match the position of the currently active tab.\n * Renders a `<span>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nexport const TabsIndicator = /*#__PURE__*/React.forwardRef(function TabsIndicator(componentProps, forwardedRef) {\n const {\n className,\n render,\n renderBeforeHydration = false,\n style: styleProp,\n ...elementProps\n } = componentProps;\n const {\n nonce\n } = useCSPContext();\n const {\n getTabElementBySelectedValue,\n orientation,\n tabActivationDirection,\n value\n } = useTabsRootContext();\n const {\n tabsListElement,\n registerIndicatorUpdateListener\n } = useTabsListContext();\n const isHydrating = useIsHydrating();\n const rerender = useForcedRerendering();\n React.useEffect(() => {\n return registerIndicatorUpdateListener(rerender);\n }, [registerIndicatorUpdateListener, rerender]);\n let left = 0;\n let right = 0;\n let top = 0;\n let bottom = 0;\n let width = 0;\n let height = 0;\n let isTabSelected = false;\n if (value != null && tabsListElement != null) {\n const activeTab = getTabElementBySelectedValue(value);\n if (activeTab != null) {\n isTabSelected = true;\n const {\n width: computedWidth,\n height: computedHeight\n } = getCssDimensions(activeTab);\n const {\n width: tabListWidth,\n height: tabListHeight\n } = getCssDimensions(tabsListElement);\n const tabRect = activeTab.getBoundingClientRect();\n const tabsListRect = tabsListElement.getBoundingClientRect();\n const scaleX = tabListWidth > 0 ? tabsListRect.width / tabListWidth : 1;\n const scaleY = tabListHeight > 0 ? tabsListRect.height / tabListHeight : 1;\n const hasNonZeroScale = Math.abs(scaleX) > Number.EPSILON && Math.abs(scaleY) > Number.EPSILON;\n if (hasNonZeroScale) {\n const tabLeftDelta = tabRect.left - tabsListRect.left;\n const tabTopDelta = tabRect.top - tabsListRect.top;\n left = tabLeftDelta / scaleX + tabsListElement.scrollLeft - tabsListElement.clientLeft;\n top = tabTopDelta / scaleY + tabsListElement.scrollTop - tabsListElement.clientTop;\n } else {\n left = activeTab.offsetLeft;\n top = activeTab.offsetTop;\n }\n width = computedWidth;\n height = computedHeight;\n right = tabsListElement.scrollWidth - left - width;\n bottom = tabsListElement.scrollHeight - top - height;\n }\n }\n const activeTabPosition = isTabSelected ? {\n left,\n right,\n top,\n bottom\n } : null;\n const activeTabSize = isTabSelected ? {\n width,\n height\n } : null;\n const style = isTabSelected ? {\n [TabsIndicatorCssVars.activeTabLeft]: `${left}px`,\n [TabsIndicatorCssVars.activeTabRight]: `${right}px`,\n [TabsIndicatorCssVars.activeTabTop]: `${top}px`,\n [TabsIndicatorCssVars.activeTabBottom]: `${bottom}px`,\n [TabsIndicatorCssVars.activeTabWidth]: `${width}px`,\n [TabsIndicatorCssVars.activeTabHeight]: `${height}px`\n } : undefined;\n const displayIndicator = isTabSelected && width > 0 && height > 0;\n const state = {\n orientation,\n activeTabPosition,\n activeTabSize,\n tabActivationDirection\n };\n const element = useRenderElement('span', componentProps, {\n state,\n ref: forwardedRef,\n props: [{\n role: 'presentation',\n style,\n hidden: !displayIndicator // do not display the indicator before the layout is settled\n }, elementProps, {\n suppressHydrationWarning: true\n }],\n stateAttributesMapping\n });\n if (value == null) {\n return null;\n }\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [element, isHydrating && renderBeforeHydration && /*#__PURE__*/_jsx(\"script\", {\n nonce: nonce\n // eslint-disable-next-line react/no-danger\n ,\n dangerouslySetInnerHTML: {\n __html: prehydrationScript\n },\n suppressHydrationWarning: true\n })]\n });\n});\nif (process.env.NODE_ENV !== \"production\") TabsIndicator.displayName = \"TabsIndicator\";","import { TransitionStatusDataAttributes } from \"../../internals/stateAttributesMapping.mjs\";\nexport let TabsPanelDataAttributes = function (TabsPanelDataAttributes) {\n /**\n * Indicates the index of the tab panel.\n */\n TabsPanelDataAttributes[\"index\"] = \"data-index\";\n /**\n * Indicates the direction of the activation (based on the previous active tab).\n * @type {'left' | 'right' | 'up' | 'down' | 'none'}\n */\n TabsPanelDataAttributes[\"activationDirection\"] = \"data-activation-direction\";\n /**\n * Indicates the orientation of the tabs.\n * @type {'horizontal' | 'vertical'}\n */\n TabsPanelDataAttributes[\"orientation\"] = \"data-orientation\";\n /**\n * Present when the panel is hidden.\n */\n TabsPanelDataAttributes[\"hidden\"] = \"data-hidden\";\n /**\n * Present when the panel is animating in.\n */\n TabsPanelDataAttributes[TabsPanelDataAttributes[\"startingStyle\"] = TransitionStatusDataAttributes.startingStyle] = \"startingStyle\";\n /**\n * Present when the panel is animating out.\n */\n TabsPanelDataAttributes[TabsPanelDataAttributes[\"endingStyle\"] = TransitionStatusDataAttributes.endingStyle] = \"endingStyle\";\n return TabsPanelDataAttributes;\n}({});","'use client';\n\nimport * as React from 'react';\nimport { inertValue } from '@base-ui/utils/inertValue';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useCompositeListItem } from \"../../internals/composite/list/useCompositeListItem.mjs\";\nimport { tabsStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useTabsRootContext } from \"../root/TabsRootContext.mjs\";\nimport { TabsPanelDataAttributes } from \"./TabsPanelDataAttributes.mjs\";\nconst stateAttributesMapping = {\n ...tabsStateAttributesMapping,\n ...transitionStatusMapping\n};\n\n/**\n * A panel displayed when the corresponding tab is active.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nexport const TabsPanel = /*#__PURE__*/React.forwardRef(function TabsPanel(componentProps, forwardedRef) {\n const {\n className,\n value,\n render,\n keepMounted = false,\n style,\n ...elementProps\n } = componentProps;\n const {\n value: selectedValue,\n getTabIdByPanelValue,\n orientation,\n tabActivationDirection,\n registerMountedTabPanel,\n unregisterMountedTabPanel\n } = useTabsRootContext();\n const id = useBaseUiId();\n const metadata = React.useMemo(() => ({\n id,\n value\n }), [id, value]);\n const {\n ref: listItemRef,\n index\n } = useCompositeListItem({\n metadata\n });\n const open = value === selectedValue;\n const {\n mounted,\n transitionStatus,\n setMounted\n } = useTransitionStatus(open);\n const hidden = !mounted;\n const correspondingTabId = getTabIdByPanelValue(value);\n const state = {\n hidden,\n orientation,\n tabActivationDirection,\n transitionStatus\n };\n const panelRef = React.useRef(null);\n const element = useRenderElement('div', componentProps, {\n state,\n ref: [forwardedRef, listItemRef, panelRef],\n props: [{\n 'aria-labelledby': correspondingTabId,\n hidden,\n id,\n role: 'tabpanel',\n tabIndex: open ? 0 : -1,\n inert: inertValue(!open),\n [TabsPanelDataAttributes.index]: index\n }, elementProps],\n stateAttributesMapping\n });\n useOpenChangeComplete({\n open,\n ref: panelRef,\n onComplete() {\n if (!open) {\n setMounted(false);\n }\n }\n });\n useIsoLayoutEffect(() => {\n if (hidden && !keepMounted) {\n return undefined;\n }\n if (id == null) {\n return undefined;\n }\n registerMountedTabPanel(value, id);\n return () => {\n unregisterMountedTabPanel(value, id);\n };\n }, [hidden, keepMounted, value, id, registerMountedTabPanel, unregisterMountedTabPanel]);\n const shouldRender = keepMounted || mounted;\n if (!shouldRender) {\n return null;\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") TabsPanel.displayName = \"TabsPanel\";","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { EMPTY_ARRAY } from '@base-ui/utils/empty';\nimport { CompositeRoot } from \"../../internals/composite/root/CompositeRoot.mjs\";\nimport { tabsStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useTabsRootContext } from \"../root/TabsRootContext.mjs\";\nimport { TabsListContext } from \"./TabsListContext.mjs\";\n\n/**\n * Groups the individual tab buttons.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const TabsList = /*#__PURE__*/React.forwardRef(function TabsList(componentProps, forwardedRef) {\n const {\n activateOnFocus = false,\n className,\n loopFocus = true,\n render,\n style,\n ...elementProps\n } = componentProps;\n const {\n onValueChange,\n orientation,\n value,\n setTabMap,\n tabActivationDirection\n } = useTabsRootContext();\n const [highlightedTabIndex, setHighlightedTabIndex] = React.useState(0);\n const [tabsListElement, setTabsListElement] = React.useState(null);\n const indicatorUpdateListenersRef = React.useRef(new Set());\n const tabResizeObserverElementsRef = React.useRef(new Set());\n const resizeObserverRef = React.useRef(null);\n useIsoLayoutEffect(() => {\n if (typeof ResizeObserver === 'undefined') {\n return undefined;\n }\n const resizeObserver = new ResizeObserver(() => {\n indicatorUpdateListenersRef.current.forEach(listener => {\n listener();\n });\n });\n resizeObserverRef.current = resizeObserver;\n if (tabsListElement) {\n resizeObserver.observe(tabsListElement);\n }\n tabResizeObserverElementsRef.current.forEach(element => {\n resizeObserver.observe(element);\n });\n return () => {\n resizeObserver.disconnect();\n resizeObserverRef.current = null;\n };\n }, [tabsListElement]);\n const registerIndicatorUpdateListener = useStableCallback(listener => {\n indicatorUpdateListenersRef.current.add(listener);\n return () => {\n indicatorUpdateListenersRef.current.delete(listener);\n };\n });\n const registerTabResizeObserverElement = useStableCallback(element => {\n tabResizeObserverElementsRef.current.add(element);\n resizeObserverRef.current?.observe(element);\n return () => {\n tabResizeObserverElementsRef.current.delete(element);\n resizeObserverRef.current?.unobserve(element);\n };\n });\n const onTabActivation = useStableCallback((newValue, eventDetails) => {\n if (newValue !== value) {\n onValueChange(newValue, eventDetails);\n }\n });\n const state = {\n orientation,\n tabActivationDirection\n };\n const defaultProps = {\n 'aria-orientation': orientation === 'vertical' ? 'vertical' : undefined,\n role: 'tablist'\n };\n const tabsListContextValue = React.useMemo(() => ({\n activateOnFocus,\n highlightedTabIndex,\n registerIndicatorUpdateListener,\n registerTabResizeObserverElement,\n onTabActivation,\n setHighlightedTabIndex,\n tabsListElement\n }), [activateOnFocus, highlightedTabIndex, registerIndicatorUpdateListener, registerTabResizeObserverElement, onTabActivation, setHighlightedTabIndex, tabsListElement]);\n return /*#__PURE__*/_jsx(TabsListContext.Provider, {\n value: tabsListContextValue,\n children: /*#__PURE__*/_jsx(CompositeRoot, {\n render: render,\n className: className,\n style: style,\n state: state,\n refs: [forwardedRef, setTabsListElement],\n props: [defaultProps, elementProps],\n stateAttributesMapping: tabsStateAttributesMapping,\n highlightedIndex: highlightedTabIndex,\n enableHomeAndEndKeys: true,\n loopFocus: loopFocus,\n orientation: orientation,\n onHighlightedIndexChange: setHighlightedTabIndex,\n onMapChange: setTabMap,\n disabledIndices: EMPTY_ARRAY\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") TabsList.displayName = \"TabsList\";","'use client';\n\nimport { Tabs as TabsPrimitive } from '@base-ui/react/tabs';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\n// ============================================\n// TabsList Variants\n// ============================================\n\nconst tabsListVariants = cva(\n 'group/tabs-list inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col',\n {\n variants: {\n variant: {\n // Primary variants\n boxed:\n 'bg-muted rounded-lg p-[3px] overflow-clip group-data-[orientation=vertical]/tabs:gap-1',\n pill: 'bg-muted rounded-full p-[3px] overflow-clip group-data-[orientation=vertical]/tabs:gap-1',\n bordered:\n 'gap-3 bg-transparent relative pb-0 w-full rounded-none overflow-x-auto after:absolute after:bottom-0 after:inset-x-0 after:h-px after:bg-border after:z-0 group-data-[orientation=vertical]/tabs:overflow-x-visible group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:inset-x-auto group-data-[orientation=vertical]/tabs:after:left-0 group-data-[orientation=vertical]/tabs:after:w-px group-data-[orientation=vertical]/tabs:after:h-auto group-data-[orientation=vertical]/tabs:w-fit',\n lifted:\n 'gap-0 bg-transparent relative w-full rounded-none overflow-x-auto after:absolute after:bottom-0 after:inset-x-0 after:h-px after:bg-border after:z-0 group-data-[orientation=vertical]/tabs:overflow-x-visible',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n align: {\n start: '',\n center: '',\n end: '',\n stretch: '',\n },\n borderPosition: {\n bottom: '',\n top: '',\n },\n },\n compoundVariants: [\n // Size applies container height for boxed/pill variants\n {\n variant: 'boxed',\n size: 'sm',\n className: 'group-data-[orientation=horizontal]/tabs:h-[38px]',\n },\n {\n variant: 'boxed',\n size: 'md',\n className: 'group-data-[orientation=horizontal]/tabs:h-[42px]',\n },\n {\n variant: 'boxed',\n size: 'lg',\n className: 'group-data-[orientation=horizontal]/tabs:h-[46px]',\n },\n {\n variant: 'pill',\n size: 'sm',\n className: 'group-data-[orientation=horizontal]/tabs:h-[38px]',\n },\n {\n variant: 'pill',\n size: 'md',\n className: 'group-data-[orientation=horizontal]/tabs:h-[42px]',\n },\n {\n variant: 'pill',\n size: 'lg',\n className: 'group-data-[orientation=horizontal]/tabs:h-[46px]',\n },\n // Alignment for bordered variant\n { variant: 'bordered', align: 'start', className: 'justify-start' },\n { variant: 'bordered', align: 'center', className: 'justify-center' },\n { variant: 'bordered', align: 'end', className: 'justify-end' },\n { variant: 'bordered', align: 'stretch', className: 'justify-start' },\n // Alignment for lifted variant\n { variant: 'lifted', align: 'start', className: 'justify-start' },\n { variant: 'lifted', align: 'center', className: 'justify-center' },\n { variant: 'lifted', align: 'end', className: 'justify-end' },\n { variant: 'lifted', align: 'stretch', className: 'justify-start' },\n // Border position top for bordered/lifted\n {\n variant: 'bordered',\n borderPosition: 'top',\n className: 'after:bottom-auto after:top-0',\n },\n {\n variant: 'lifted',\n borderPosition: 'top',\n className: 'after:bottom-auto after:top-0',\n },\n ],\n defaultVariants: {\n variant: 'boxed',\n size: 'md',\n align: 'start',\n borderPosition: 'bottom',\n },\n },\n);\n\ntype TabsListVariantProps = VariantProps<typeof tabsListVariants>;\n\ninterface TabsListProps extends TabsPrimitive.List.Props, TabsListVariantProps {\n /** Enable gradient styling on active tab */\n gradient?: boolean;\n}\n\n// ============================================\n// TabsTrigger Variants\n// ============================================\n\nconst tabsTriggerVariants = cva([\n // Base\n 'relative inline-flex items-center justify-center whitespace-nowrap',\n 'gap-1.5 border border-transparent font-medium',\n 'transition-[color,background-color,border-color,box-shadow,opacity] duration-200 ease-smooth motion-reduce:transition-none',\n 'group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:outline-1',\n 'disabled:pointer-events-none disabled:text-muted-foreground disabled:opacity-70',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n 'text-foreground',\n\n // Size: sm\n 'group-data-[size=sm]/tabs-list:h-9 group-data-[size=sm]/tabs-list:px-2 group-data-[size=sm]/tabs-list:py-1 group-data-[size=sm]/tabs-list:text-sm',\n \"group-data-[size=sm]/tabs-list:[&_svg:not([class*='size-'])]:size-4\",\n // Size: md\n 'group-data-[size=md]/tabs-list:h-10 group-data-[size=md]/tabs-list:px-2.5 group-data-[size=md]/tabs-list:py-[5px] group-data-[size=md]/tabs-list:text-sm',\n \"group-data-[size=md]/tabs-list:[&_svg:not([class*='size-'])]:size-4\",\n // Size: lg\n 'group-data-[size=lg]/tabs-list:h-11 group-data-[size=lg]/tabs-list:px-3 group-data-[size=lg]/tabs-list:py-2 group-data-[size=lg]/tabs-list:text-base',\n \"group-data-[size=lg]/tabs-list:[&_svg:not([class*='size-'])]:size-5\",\n\n // Boxed variant\n 'group-data-[variant=boxed]/tabs-list:rounded-[10px] group-data-[variant=boxed]/tabs-list:flex-1 group-data-[variant=boxed]/tabs-list:h-[calc(100%-1px)]',\n 'group-data-[variant=boxed]/tabs-list:data-active:bg-secondary group-data-[variant=boxed]/tabs-list:data-active:shadow-sm group-data-[variant=boxed]/tabs-list:data-active:text-foreground',\n 'group-data-[variant=boxed]/tabs-list:hover:bg-primary-foreground dark:group-data-[variant=boxed]/tabs-list:hover:bg-input/30',\n 'group-data-[orientation=vertical]/tabs:group-data-[variant=boxed]/tabs-list:flex-initial group-data-[orientation=vertical]/tabs:group-data-[variant=boxed]/tabs-list:justify-center',\n\n // Pill variant\n 'group-data-[variant=pill]/tabs-list:rounded-full group-data-[variant=pill]/tabs-list:flex-1 group-data-[variant=pill]/tabs-list:h-[calc(100%-1px)]',\n 'group-data-[variant=pill]/tabs-list:data-active:bg-background group-data-[variant=pill]/tabs-list:data-active:shadow-sm group-data-[variant=pill]/tabs-list:data-active:text-foreground',\n 'group-data-[variant=pill]/tabs-list:hover:bg-primary-foreground dark:group-data-[variant=pill]/tabs-list:hover:bg-input/30',\n 'dark:group-data-[variant=pill]/tabs-list:data-active:bg-accent dark:group-data-[variant=pill]/tabs-list:data-active:text-accent-foreground dark:group-data-[variant=pill]/tabs-list:data-active:border-input',\n 'group-data-[orientation=vertical]/tabs:group-data-[variant=pill]/tabs-list:flex-initial group-data-[orientation=vertical]/tabs:group-data-[variant=pill]/tabs-list:justify-center',\n\n // Bordered variant\n 'group-data-[variant=bordered]/tabs-list:bg-transparent group-data-[variant=bordered]/tabs-list:rounded-none',\n 'group-data-[variant=bordered]/tabs-list:pb-2.5 group-data-[variant=bordered]/tabs-list:flex-initial',\n 'group-data-[variant=bordered]/tabs-list:data-active:bg-background group-data-[variant=bordered]/tabs-list:data-active:text-primary group-data-[variant=bordered]/tabs-list:data-active:shadow-none',\n 'group-data-[variant=bordered]/tabs-list:group-data-[align=stretch]/tabs-list:flex-1',\n 'group-data-[variant=bordered]/tabs-list:after:bg-primary/90 group-data-[variant=bordered]/tabs-list:after:absolute group-data-[variant=bordered]/tabs-list:after:bottom-0 group-data-[variant=bordered]/tabs-list:after:inset-x-0 group-data-[variant=bordered]/tabs-list:after:h-0.5 group-data-[variant=bordered]/tabs-list:after:z-10 group-data-[variant=bordered]/tabs-list:after:opacity-0 group-data-[variant=bordered]/tabs-list:after:transition-opacity group-data-[variant=bordered]/tabs-list:after:duration-200 group-data-[variant=bordered]/tabs-list:after:ease-out',\n 'group-data-[variant=bordered]/tabs-list:data-active:after:opacity-100',\n 'group-data-[variant=bordered]/tabs-list:hover:after:opacity-100 group-data-[variant=bordered]/tabs-list:hover:after:bg-primary/20',\n 'group-data-[variant=bordered]/tabs-list:data-active:hover:after:bg-primary/90',\n 'group-data-[variant=bordered]/tabs-list:group-data-[border-position=top]/tabs-list:after:bottom-auto group-data-[variant=bordered]/tabs-list:group-data-[border-position=top]/tabs-list:after:top-0',\n 'group-data-[variant=bordered]/tabs-list:group-data-[border-position=top]/tabs-list:pb-0 group-data-[variant=bordered]/tabs-list:group-data-[border-position=top]/tabs-list:pt-2.5',\n 'group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:inset-x-auto group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:inset-y-0 group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:left-0 group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:w-0.5 group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:h-auto',\n 'group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:pb-0 group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:pl-2.5',\n\n // Lifted variant — browser-tab style with curved corner connectors\n 'group-data-[variant=lifted]/tabs-list:flex-initial',\n 'group-data-[variant=lifted]/tabs-list:rounded-t-md',\n 'group-data-[variant=lifted]/tabs-list:border-b group-data-[variant=lifted]/tabs-list:border-b-border',\n 'group-data-[variant=lifted]/tabs-list:text-foreground',\n 'group-data-[variant=lifted]/tabs-list:data-active:bg-background',\n 'group-data-[variant=lifted]/tabs-list:data-active:text-primary',\n 'group-data-[variant=lifted]/tabs-list:data-active:border group-data-[variant=lifted]/tabs-list:data-active:border-border',\n 'group-data-[variant=lifted]/tabs-list:data-active:border-b-0 group-data-[variant=lifted]/tabs-list:data-active:border-b-background',\n 'group-data-[variant=lifted]/tabs-list:data-active:rounded-t-[10px]',\n 'group-data-[variant=lifted]/tabs-list:data-active:mb-[-1px] group-data-[variant=lifted]/tabs-list:data-active:z-10',\n 'group-data-[variant=lifted]/tabs-list:data-active:before:absolute group-data-[variant=lifted]/tabs-list:data-active:before:bottom-0 group-data-[variant=lifted]/tabs-list:data-active:before:left-[-10px] group-data-[variant=lifted]/tabs-list:data-active:before:size-[10px] group-data-[variant=lifted]/tabs-list:data-active:before:rounded-br-[10px] group-data-[variant=lifted]/tabs-list:data-active:before:border-b group-data-[variant=lifted]/tabs-list:data-active:before:border-r group-data-[variant=lifted]/tabs-list:data-active:before:border-border group-data-[variant=lifted]/tabs-list:data-active:before:bg-background group-data-[variant=lifted]/tabs-list:data-active:before:shadow-[2px_2px_0_0_var(--background)]',\n 'group-data-[variant=lifted]/tabs-list:data-active:after:absolute group-data-[variant=lifted]/tabs-list:data-active:after:bottom-0 group-data-[variant=lifted]/tabs-list:data-active:after:right-[-10px] group-data-[variant=lifted]/tabs-list:data-active:after:size-[10px] group-data-[variant=lifted]/tabs-list:data-active:after:rounded-bl-[10px] group-data-[variant=lifted]/tabs-list:data-active:after:border-b group-data-[variant=lifted]/tabs-list:data-active:after:border-l group-data-[variant=lifted]/tabs-list:data-active:after:border-border group-data-[variant=lifted]/tabs-list:data-active:after:bg-background group-data-[variant=lifted]/tabs-list:data-active:after:shadow-[-2px_2px_0_0_var(--background)]',\n 'group-data-[variant=lifted]/tabs-list:group-data-[align=stretch]/tabs-list:flex-1',\n\n // Gradient support (uses brand tokens)\n 'group-data-[variant=boxed]/tabs-list:group-data-[gradient]/tabs-list:data-active:bg-[linear-gradient(100deg,var(--air-100)/0.1,var(--primary)/0.1)] group-data-[variant=boxed]/tabs-list:group-data-[gradient]/tabs-list:data-active:text-primary',\n 'group-data-[variant=pill]/tabs-list:group-data-[gradient]/tabs-list:data-active:bg-[linear-gradient(98deg,var(--air-100),var(--primary))] group-data-[variant=pill]/tabs-list:group-data-[gradient]/tabs-list:data-active:text-primary-foreground',\n\n // Hide pseudo-element underline when TabsIndicator is used\n 'group-has-[[data-slot=tabs-indicator]]/tabs-list:after:hidden',\n]);\n\n// ============================================\n// Components\n// ============================================\n\nconst Tabs = React.forwardRef<HTMLDivElement, TabsPrimitive.Root.Props>(\n ({ className, orientation = 'horizontal', ...props }, ref) => (\n <TabsPrimitive.Root\n ref={ref}\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\n 'gap-2 group/tabs flex data-[orientation=horizontal]:flex-col',\n className,\n )}\n {...props}\n />\n ),\n);\n\nconst TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n (\n {\n className,\n variant = 'boxed',\n size = 'md',\n align = 'start',\n borderPosition = 'bottom',\n gradient,\n ...props\n },\n ref,\n ) => {\n return (\n <TabsPrimitive.List\n ref={ref}\n data-slot=\"tabs-list\"\n data-variant={variant}\n data-align={align}\n data-size={size}\n data-border-position={borderPosition}\n {...(gradient ? { 'data-gradient': '' } : {})}\n className={cn(\n tabsListVariants({ variant, size, align, borderPosition }),\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nconst TabsTrigger = React.forwardRef<\n HTMLButtonElement,\n TabsPrimitive.Tab.Props\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Tab\n ref={ref}\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants(), className)}\n {...props}\n />\n));\n\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsPrimitive.Panel.Props>(\n ({ className, ...props }, ref) => (\n <TabsPrimitive.Panel\n ref={ref}\n data-slot=\"tabs-content\"\n className={cn(\n 'flex-1 focus-visible:outline-none delight-fade-in',\n className,\n )}\n {...props}\n />\n ),\n);\n\n/**\n * Animated indicator that slides to the active tab position.\n * Use with `variant=\"bordered\"` on TabsList.\n *\n * @example\n * ```tsx\n * <TabsList variant=\"bordered\">\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * <TabsIndicator />\n * </TabsList>\n * ```\n */\nconst TabsIndicator = React.forwardRef<\n HTMLSpanElement,\n TabsPrimitive.Indicator.Props\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Indicator\n ref={ref}\n data-slot=\"tabs-indicator\"\n className={cn(\n 'absolute bottom-0 left-0 h-0.5 z-10 bg-primary/90',\n 'w-[var(--active-tab-width)]',\n // Width must be layout-animated (Base UI constraint); transform is GPU-composited\n 'transition-[transform,width] duration-300 ease-smooth motion-reduce:transition-none',\n className,\n )}\n style={{\n transform: 'translateX(var(--active-tab-left, 0px))',\n }}\n {...props}\n />\n));\n\nTabs.displayName = 'Tabs';\nTabsList.displayName = 'TabsList';\nTabsTrigger.displayName = 'TabsTrigger';\nTabsContent.displayName = 'TabsContent';\nTabsIndicator.displayName = 'TabsIndicator';\n\nexport {\n Tabs,\n TabsContent,\n TabsIndicator,\n TabsList,\n TabsTrigger,\n tabsListVariants,\n tabsTriggerVariants,\n};\n","'use client';\n\n/**\n * Tabs Component\n *\n * A flexible tabs component with multiple visual variants.\n *\n * ## Variants\n *\n * Pass `variant` prop to `TabsList`:\n *\n * - **boxed** - Tabs with muted background container (default)\n * - **pill** - Fully rounded tabs with muted background\n * - **bordered** - Transparent background with bottom border indicator\n * - **lifted** - Browser-tab style with active tab lifted above border\n *\n * ## Usage\n *\n * ```tsx\n * // Boxed variant (default)\n * <Tabs defaultValue=\"tab1\">\n * <TabsList variant=\"boxed\">\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * </TabsList>\n * </Tabs>\n *\n * // Bordered variant with counts\n * <Tabs defaultValue=\"all\">\n * <TabsList variant=\"bordered\">\n * <TabsTriggerWithCount value=\"all\" count={5} isActive>All</TabsTriggerWithCount>\n * <TabsTriggerWithCount value=\"mine\" count={3}>Mine</TabsTriggerWithCount>\n * </TabsList>\n * </Tabs>\n *\n * // With icons\n * <Tabs defaultValue=\"home\">\n * <TabsList variant=\"boxed\" size=\"md\">\n * <TabsTrigger value=\"home\" icon={<Home />}>Home</TabsTrigger>\n * <TabsTrigger value=\"settings\" icon={<Settings />}>Settings</TabsTrigger>\n * </TabsList>\n * </Tabs>\n *\n * // Pill variant with gradient\n * <Tabs defaultValue=\"tab1\">\n * <TabsList variant=\"pill\" gradient>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * </Tabs>\n *\n * // Animated indicator (smooth sliding underline)\n * <Tabs defaultValue=\"tab1\">\n * <TabsList variant=\"bordered\">\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * <TabsIndicator />\n * </TabsList>\n * </Tabs>\n * ```\n *\n * @module Tabs\n */\n\nimport { Tabs as TabsPrimitive } from '@base-ui/react/tabs';\nimport type { VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\nimport { Badge } from '@/components/atoms/display/Badge';\nimport { tabsListVariants, tabsTriggerVariants } from '@/components/ui/tabs';\nimport { useControllableState } from '@/hooks/use-controllable-state';\nimport { cn } from '@/lib/utils';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface TabsProps\n extends Omit<TabsPrimitive.Root.Props, 'onValueChange'> {\n /** Controlled active tab value. When provided, component is controlled. */\n value?: string;\n /** Initial active tab for uncontrolled mode */\n defaultValue?: string;\n /** Callback when active tab changes */\n onValueChange?: (value: string) => void;\n}\n\nexport interface TabsListProps\n extends TabsPrimitive.List.Props,\n VariantProps<typeof tabsListVariants> {\n /** Enable gradient styling on active tab (boxed/pill variants only) */\n gradient?: boolean;\n}\n\nexport interface TabsTriggerProps extends TabsPrimitive.Tab.Props {\n /** Icon element to render in the tab */\n icon?: React.ReactNode;\n /** Position of the icon relative to text */\n iconPosition?: 'start' | 'top';\n /** Show a notification dot indicator */\n dot?: boolean;\n /** Badge element to render after the text (e.g., count or status badge) */\n badge?: React.ReactNode;\n}\n\nexport type TabsContentProps = TabsPrimitive.Panel.Props;\n\nexport type TabsIndicatorProps = TabsPrimitive.Indicator.Props;\n\nexport interface TabsTriggerWithCountProps extends TabsTriggerProps {\n /** Count to display in badge */\n count?: number;\n /** Whether this tab is currently active (used for badge styling) */\n isActive?: boolean;\n}\n\n// ============================================\n// TabsRoot (with controlled/uncontrolled support)\n// ============================================\n\nfunction TabsRoot({\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n children,\n className,\n ...props\n}: TabsProps) {\n const [value, setValue] = useControllableState({\n value: controlledValue,\n defaultValue: defaultValue ?? '',\n onChange: onValueChange,\n });\n\n const handleValueChange = React.useCallback(\n (newValue: string | null) => {\n if (newValue !== null) {\n setValue(newValue);\n }\n },\n [setValue],\n );\n\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n value={value}\n onValueChange={handleValueChange}\n className={cn(\n 'gap-2 group/tabs flex data-[orientation=horizontal]:flex-col',\n className,\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.Root>\n );\n}\n\n// ============================================\n// TabsList\n// ============================================\n\nfunction TabsList({\n className,\n variant = 'boxed',\n size = 'md',\n align = 'start',\n borderPosition = 'bottom',\n gradient,\n ...props\n}: TabsListProps) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n data-size={size}\n data-align={align}\n data-border-position={borderPosition}\n {...(gradient ? { 'data-gradient': '' } : {})}\n className={cn(\n tabsListVariants({ variant, size, align, borderPosition }),\n className,\n )}\n {...props}\n />\n );\n}\n\n// Trigger styles are provided by tabsTriggerVariants from the primitive (ui/tabs).\n// The molecule layers only icon/dot/badge-specific classes on top.\n\n// ============================================\n// TabsTrigger\n// ============================================\n\nfunction TabsTrigger({\n className,\n icon,\n iconPosition = 'start',\n dot,\n badge,\n children,\n ...props\n}: TabsTriggerProps) {\n const isIconOnly = icon && !children;\n\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n data-icon-position={iconPosition}\n data-icon-only={isIconOnly || undefined}\n className={cn(\n tabsTriggerVariants(),\n iconPosition === 'top' && 'flex-col gap-1 pb-6',\n isIconOnly && 'px-2',\n className,\n )}\n {...props}\n >\n {icon && (\n <span\n data-slot=\"tabs-trigger-icon\"\n className={cn(\n \"shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n iconPosition === 'top' &&\n \"[&_svg:not([class*='size-'])]:size-[18px]\",\n )}\n >\n {icon}\n </span>\n )}\n {children}\n {badge}\n {dot && (\n <span\n data-slot=\"tabs-trigger-dot\"\n className=\"absolute -top-0.5 -right-0.5 size-2 rounded-full bg-primary delight-status-pulse\"\n />\n )}\n </TabsPrimitive.Tab>\n );\n}\n\n// ============================================\n// TabsContent\n// ============================================\n\nfunction TabsContent({ className, ...props }: TabsContentProps) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\n 'flex-1 focus-visible:outline-none delight-fade-in',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ============================================\n// TabsIndicator\n// ============================================\n\n/**\n * Animated indicator that slides to the active tab position.\n * Use with `variant=\"bordered\"` on TabsList.\n *\n * @example\n * ```tsx\n * <TabsList variant=\"bordered\">\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * <TabsIndicator />\n * </TabsList>\n * ```\n */\nfunction TabsIndicator({ className, ...props }: TabsIndicatorProps) {\n return (\n <TabsPrimitive.Indicator\n data-slot=\"tabs-indicator\"\n className={cn(\n 'absolute bottom-0 left-0 h-0.5 z-10 bg-primary/90',\n 'w-[var(--active-tab-width)]',\n 'transition-[transform,width] duration-300 ease-smooth motion-reduce:transition-none',\n className,\n )}\n style={{\n transform: 'translateX(var(--active-tab-left, 0px))',\n }}\n {...props}\n />\n );\n}\n\n// ============================================\n// TabsTriggerWithCount - Extended trigger with badge count\n// ============================================\n\n/**\n * Extended tab trigger with an optional count badge.\n * Best used with the `bordered` variant for filter-style tabs.\n *\n * @example\n * ```tsx\n * <TabsList variant=\"bordered\">\n * <TabsTriggerWithCount value=\"all\" count={5} isActive>All Meetings</TabsTriggerWithCount>\n * <TabsTriggerWithCount value=\"my\" count={4}>My Meetings</TabsTriggerWithCount>\n * <TabsTriggerWithCount value=\"shared\" count={1}>Shared with me</TabsTriggerWithCount>\n * </TabsList>\n * ```\n */\nfunction TabsTriggerWithCount({\n children,\n count,\n isActive,\n className,\n ...props\n}: TabsTriggerWithCountProps) {\n return (\n <TabsTrigger className={cn('gap-2', className)} {...props}>\n {children}\n {count !== undefined && (\n <Badge\n variant=\"soft\"\n color={isActive ? 'primary' : 'secondary'}\n size=\"xs\"\n className=\"min-w-[18px]\"\n >\n {count}\n </Badge>\n )}\n </TabsTrigger>\n );\n}\n\n// ============================================\n// Display Names\n// ============================================\n\nTabsRoot.displayName = 'Tabs';\nTabsList.displayName = 'TabsList';\nTabsTrigger.displayName = 'TabsTrigger';\nTabsContent.displayName = 'TabsContent';\nTabsIndicator.displayName = 'TabsIndicator';\nTabsTriggerWithCount.displayName = 'TabsTriggerWithCount';\n\n// ============================================\n// Compound Component (Dot Notation)\n// ============================================\n\n/**\n * Tabs compound component with dot notation access to sub-components.\n *\n * @example\n * ```tsx\n * <Tabs defaultValue=\"tab1\">\n * <Tabs.List>\n * <Tabs.Trigger value=\"tab1\">Tab 1</Tabs.Trigger>\n * <Tabs.Trigger value=\"tab2\">Tab 2</Tabs.Trigger>\n * </Tabs.List>\n * <Tabs.Content value=\"tab1\">Content 1</Tabs.Content>\n * <Tabs.Content value=\"tab2\">Content 2</Tabs.Content>\n * </Tabs>\n * ```\n */\nconst Tabs = Object.assign(TabsRoot, {\n Root: TabsRoot,\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n Indicator: TabsIndicator,\n TriggerWithCount: TabsTriggerWithCount,\n});\n\nexport {\n Tabs,\n TabsContent,\n TabsIndicator,\n TabsList,\n TabsTrigger,\n TabsTriggerWithCount,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","names":["React","React","_formatErrorMessage","TabsRoot","React","REASONS.missing","REASONS.initial","REASONS.disabled","React","_formatErrorMessage","React","REASONS.none","stateAttributesMapping","TabsIndicator","React","React","TabsList","React"],"sources":["../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+utils@0.3.1+5d66306c8bc7085f/node_modules/@base-ui/utils/useForcedRerendering.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/utils/getCssDimensions.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/root/TabsRootContext.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/root/TabsRootDataAttributes.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/root/stateAttributesMapping.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/root/TabsRoot.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/list/TabsListContext.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/tab/TabsTab.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/indicator/prehydrationScript.min.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/indicator/TabsIndicatorCssVars.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/indicator/TabsIndicator.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/panel/TabsPanelDataAttributes.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/panel/TabsPanel.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/@base-ui+react@1.6.0+1c528c44af60ea5b/node_modules/@base-ui/react/tabs/list/TabsList.mjs","../../src/components/ui/tabs.tsx","../../src/components/molecules/navigation/Tabs/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n/**\n * Returns a function that forces a rerender.\n */\nexport function useForcedRerendering() {\n const [, setState] = React.useState({});\n return React.useCallback(() => {\n setState({});\n }, []);\n}","import { round } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement } from '@floating-ui/utils/dom';\nexport function getCssDimensions(element) {\n const css = getComputedStyle(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height\n };\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\n/**\n * @internal\n */\nexport const TabsRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") TabsRootContext.displayName = \"TabsRootContext\";\nexport function useTabsRootContext() {\n const context = React.useContext(TabsRootContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: TabsRootContext is missing. Tabs parts must be placed within <Tabs.Root>.' : _formatErrorMessage(64));\n }\n return context;\n}","export let TabsRootDataAttributes = /*#__PURE__*/function (TabsRootDataAttributes) {\n /**\n * Indicates the direction of the activation (based on the previous active tab).\n * @type {'left' | 'right' | 'up' | 'down' | 'none'}\n */\n TabsRootDataAttributes[\"activationDirection\"] = \"data-activation-direction\";\n /**\n * Indicates the orientation of the tabs.\n * @type {'horizontal' | 'vertical'}\n */\n TabsRootDataAttributes[\"orientation\"] = \"data-orientation\";\n return TabsRootDataAttributes;\n}({});","import { TabsRootDataAttributes } from \"./TabsRootDataAttributes.mjs\";\nexport const tabsStateAttributesMapping = {\n tabActivationDirection: dir => ({\n [TabsRootDataAttributes.activationDirection]: dir\n })\n};","'use client';\n\nimport * as React from 'react';\nimport { useControlled } from '@base-ui/utils/useControlled';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { CompositeList } from \"../../internals/composite/list/CompositeList.mjs\";\nimport { TabsRootContext } from \"./TabsRootContext.mjs\";\nimport { tabsStateAttributesMapping } from \"./stateAttributesMapping.mjs\";\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\n\n/**\n * Groups the tabs and the corresponding panels.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const TabsRoot = /*#__PURE__*/React.forwardRef(function TabsRoot(componentProps, forwardedRef) {\n const {\n className,\n defaultValue: defaultValueProp = 0,\n onValueChange: onValueChangeProp,\n orientation = 'horizontal',\n render,\n value: valueProp,\n style,\n ...elementProps\n } = componentProps;\n\n // Track whether the user explicitly provided a defined `defaultValue` prop.\n // Used to determine if we should honor a disabled tab selection.\n const hasExplicitDefaultValueProp = componentProps.defaultValue !== undefined;\n const tabPanelRefs = React.useRef([]);\n const [mountedTabPanels, setMountedTabPanels] = React.useState(() => new Map());\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValueProp,\n name: 'Tabs',\n state: 'value'\n });\n const isControlled = valueProp !== undefined;\n const [tabMap, setTabMap] = React.useState(() => new Map());\n const lastKnownTabElementRef = React.useRef(undefined);\n\n // Used for activation direction detection via tab element positions.\n const getTabElementBySelectedValue = React.useCallback(selectedValue => {\n if (selectedValue === undefined) {\n return null;\n }\n for (const [tabElement, tabMetadata] of tabMap.entries()) {\n if (tabMetadata != null && selectedValue === (tabMetadata.value ?? tabMetadata.index)) {\n return tabElement;\n }\n }\n return null;\n }, [tabMap]);\n const [activationDirectionState, setActivationDirectionState] = React.useState(() => ({\n previousValue: value,\n tabActivationDirection: 'none'\n }));\n const {\n previousValue,\n tabActivationDirection: committedTabActivationDirection\n } = activationDirectionState;\n let tabActivationDirection = committedTabActivationDirection;\n let directionComputationIncomplete = false;\n\n // Compute activation direction during render when value changes so children see\n // the correct direction on their very first render after the selection update.\n // The previous value snapshot is stored in state and synced after commit.\n // https://github.com/mui/base-ui/issues/3873\n if (previousValue !== value) {\n tabActivationDirection = computeActivationDirection(previousValue, value, orientation, tabMap);\n\n // When a new tab is added and selected in the same controlled update,\n // the tab element may not yet be registered in tabMap, so direction was\n // computed from a value-based fallback. Keep the previous value snapshot\n // stale so we re-compute from DOM positions once tabMap is up to date.\n directionComputationIncomplete = previousValue != null && value != null && getTabElementBySelectedValue(value) == null;\n }\n const nextPreviousValue = directionComputationIncomplete ? previousValue : value;\n const shouldSyncActivationDirectionState = previousValue !== nextPreviousValue || committedTabActivationDirection !== tabActivationDirection;\n useIsoLayoutEffect(() => {\n if (!shouldSyncActivationDirectionState) {\n return;\n }\n setActivationDirectionState({\n previousValue: nextPreviousValue,\n tabActivationDirection\n });\n }, [nextPreviousValue, shouldSyncActivationDirectionState, tabActivationDirection]);\n const onValueChange = useStableCallback((newValue, eventDetails) => {\n const activationDirection = computeActivationDirection(value, newValue, orientation, tabMap);\n eventDetails.activationDirection = activationDirection;\n onValueChangeProp?.(newValue, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n setValue(newValue);\n });\n const notifyAutomaticValueChange = useStableCallback((nextValue, reason) => {\n onValueChangeProp?.(nextValue, createChangeEventDetails(reason, undefined, undefined, {\n activationDirection: 'none'\n }));\n });\n const registerMountedTabPanel = useStableCallback((panelValue, panelId) => {\n setMountedTabPanels(prev => {\n if (prev.get(panelValue) === panelId) {\n return prev;\n }\n const next = new Map(prev);\n next.set(panelValue, panelId);\n return next;\n });\n });\n const unregisterMountedTabPanel = useStableCallback((panelValue, panelId) => {\n setMountedTabPanels(prev => {\n if (!prev.has(panelValue) || prev.get(panelValue) !== panelId) {\n return prev;\n }\n const next = new Map(prev);\n next.delete(panelValue);\n return next;\n });\n });\n\n // get the `id` attribute of <Tabs.Panel> to set as the value of `aria-controls` on <Tabs.Tab>\n const getTabPanelIdByValue = React.useCallback(tabValue => {\n return mountedTabPanels.get(tabValue);\n }, [mountedTabPanels]);\n\n // get the `id` attribute of <Tabs.Tab> to set as the value of `aria-labelledby` on <Tabs.Panel>\n const getTabIdByPanelValue = React.useCallback(tabPanelValue => {\n for (const tabMetadata of tabMap.values()) {\n if (tabPanelValue === tabMetadata?.value) {\n return tabMetadata?.id;\n }\n }\n return undefined;\n }, [tabMap]);\n const tabsContextValue = React.useMemo(() => ({\n getTabElementBySelectedValue,\n getTabIdByPanelValue,\n getTabPanelIdByValue,\n onValueChange,\n orientation,\n registerMountedTabPanel,\n setTabMap,\n unregisterMountedTabPanel,\n tabActivationDirection,\n value\n }), [getTabElementBySelectedValue, getTabIdByPanelValue, getTabPanelIdByValue, onValueChange, orientation, registerMountedTabPanel, setTabMap, unregisterMountedTabPanel, tabActivationDirection, value]);\n const selectedTabMetadata = React.useMemo(() => {\n for (const tabMetadata of tabMap.values()) {\n if (tabMetadata != null && tabMetadata.value === value) {\n return tabMetadata;\n }\n }\n return undefined;\n }, [tabMap, value]);\n\n // Find the first non-disabled tab value.\n // Used as a fallback when the current selection is disabled or missing.\n const firstEnabledTabValue = React.useMemo(() => {\n for (const tabMetadata of tabMap.values()) {\n if (tabMetadata != null && !tabMetadata.disabled) {\n return tabMetadata.value;\n }\n }\n return undefined;\n }, [tabMap]);\n\n // Implicit uncontrolled selections are still automatic changes, so notify\n // once when the tabs first register. Explicit defaults are treated as user-owned.\n const shouldNotifyInitialValueChangeRef = React.useRef(!hasExplicitDefaultValueProp);\n // useControlled warns if defaultValue changes after mount, but the\n // disabled-default honor policy below still needs a stable initial value.\n const initialDefaultValueRef = React.useRef(defaultValueProp);\n // An explicit defaultValue can intentionally point at a disabled tab on mount.\n // Once that selection becomes valid, later disabled states should fall back.\n const shouldHonorDisabledDefaultValueRef = React.useRef(hasExplicitDefaultValueProp);\n const didRegisterTabsRef = React.useRef(false);\n\n // Uncontrolled roots own automatic fallback. Controlled roots keep the exact\n // value supplied by the parent, even when that tab is disabled or missing.\n useIsoLayoutEffect(() => {\n if (isControlled) {\n return;\n }\n function commitAutomaticValueChange(fallbackValue, fallbackReason) {\n setValue(fallbackValue);\n // Automatic fallbacks are not directional transitions; reset the direction\n // alongside the value so the batched commit keeps both in sync.\n setActivationDirectionState(prev => {\n if (prev.previousValue === fallbackValue && prev.tabActivationDirection === 'none') {\n return prev;\n }\n return {\n previousValue: fallbackValue,\n tabActivationDirection: 'none'\n };\n });\n notifyAutomaticValueChange(fallbackValue, fallbackReason);\n // Mark the initial notification as delivered only after the consumer\n // callback returns. The fallback value is queued first so automatic\n // consistency updates are not cancelable through a throwing handler.\n shouldNotifyInitialValueChangeRef.current = false;\n }\n if (tabMap.size === 0) {\n // A Suspense boundary outside the root can clean up layout effects while\n // keeping the previous tabs connected. Don't treat that as removal.\n if (didRegisterTabsRef.current && value !== null && !lastKnownTabElementRef.current?.isConnected) {\n commitAutomaticValueChange(null, REASONS.missing);\n }\n return;\n }\n didRegisterTabsRef.current = true;\n lastKnownTabElementRef.current = tabMap.keys().next().value;\n const selectionIsDisabled = selectedTabMetadata?.disabled;\n const selectionIsMissing = selectedTabMetadata == null && value !== null;\n if (!selectionIsDisabled && value === initialDefaultValueRef.current) {\n shouldHonorDisabledDefaultValueRef.current = false;\n }\n if (shouldHonorDisabledDefaultValueRef.current && selectionIsDisabled && value === initialDefaultValueRef.current) {\n return;\n }\n const shouldNotifyInitialValueChange = shouldNotifyInitialValueChangeRef.current;\n if (selectionIsDisabled || selectionIsMissing) {\n const fallbackValue = firstEnabledTabValue ?? null;\n if (value === fallbackValue) {\n // Already at the fallback value; no commit or notification needed,\n // but record that the implicit-initial transition has resolved.\n shouldNotifyInitialValueChangeRef.current = false;\n return;\n }\n let fallbackReason = REASONS.missing;\n if (shouldNotifyInitialValueChange) {\n fallbackReason = REASONS.initial;\n } else if (selectionIsDisabled) {\n fallbackReason = REASONS.disabled;\n }\n commitAutomaticValueChange(fallbackValue, fallbackReason);\n return;\n }\n if (shouldNotifyInitialValueChange && selectedTabMetadata != null) {\n notifyAutomaticValueChange(value, REASONS.initial);\n shouldNotifyInitialValueChangeRef.current = false;\n }\n }, [firstEnabledTabValue, isControlled, notifyAutomaticValueChange, selectedTabMetadata, setValue, tabMap, value]);\n const state = {\n orientation,\n tabActivationDirection\n };\n const element = useRenderElement('div', componentProps, {\n state,\n ref: forwardedRef,\n props: elementProps,\n stateAttributesMapping: tabsStateAttributesMapping\n });\n return /*#__PURE__*/_jsx(TabsRootContext.Provider, {\n value: tabsContextValue,\n children: /*#__PURE__*/_jsx(CompositeList, {\n elementsRef: tabPanelRefs,\n children: element\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") TabsRoot.displayName = \"TabsRoot\";\nfunction computeActivationDirection(oldValue, newValue, orientation, tabMap) {\n if (oldValue == null || newValue == null) {\n return 'none';\n }\n let oldTab = null;\n let newTab = null;\n for (const [tabElement, tabMetadata] of tabMap.entries()) {\n if (tabMetadata == null) {\n continue;\n }\n const tabValue = tabMetadata.value ?? tabMetadata.index;\n if (oldValue === tabValue) {\n oldTab = tabElement;\n }\n if (newValue === tabValue) {\n newTab = tabElement;\n }\n if (oldTab != null && newTab != null) {\n break;\n }\n }\n if (oldTab == null || newTab == null) {\n // Fallback for dynamic tabs: when a tab element isn't registered yet\n // (e.g. added and selected in the same update), infer direction from\n // the values themselves. Works for comparable types (numbers, strings).\n if (oldTab !== newTab && (typeof oldValue === 'number' || typeof oldValue === 'string') && typeof oldValue === typeof newValue) {\n if (orientation === 'horizontal') {\n return newValue > oldValue ? 'right' : 'left';\n }\n return newValue > oldValue ? 'down' : 'up';\n }\n return 'none';\n }\n const oldRect = oldTab.getBoundingClientRect();\n const newRect = newTab.getBoundingClientRect();\n if (orientation === 'horizontal') {\n if (newRect.left < oldRect.left) {\n return 'left';\n }\n if (newRect.left > oldRect.left) {\n return 'right';\n }\n } else {\n if (newRect.top < oldRect.top) {\n return 'up';\n }\n if (newRect.top > oldRect.top) {\n return 'down';\n }\n }\n return 'none';\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const TabsListContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") TabsListContext.displayName = \"TabsListContext\";\nexport function useTabsListContext() {\n const context = React.useContext(TabsListContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: TabsListContext is missing. TabsList parts must be placed within <Tabs.List>.' : _formatErrorMessage(65));\n }\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { ownerDocument } from '@base-ui/utils/owner';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useButton } from \"../../internals/use-button/index.mjs\";\nimport { ACTIVE_COMPOSITE_ITEM } from \"../../internals/composite/constants.mjs\";\nimport { useCompositeItem } from \"../../internals/composite/item/useCompositeItem.mjs\";\nimport { useTabsRootContext } from \"../root/TabsRootContext.mjs\";\nimport { tabsStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useTabsListContext } from \"../list/TabsListContext.mjs\";\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\nimport { activeElement, contains } from \"../../floating-ui-react/utils.mjs\";\n\n/**\n * An individual interactive tab button that toggles the corresponding panel.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nexport const TabsTab = /*#__PURE__*/React.forwardRef(function TabsTab(componentProps, forwardedRef) {\n const {\n className,\n disabled = false,\n render,\n value,\n id: idProp,\n nativeButton = true,\n style,\n ...elementProps\n } = componentProps;\n const {\n value: activeTabValue,\n getTabPanelIdByValue,\n orientation,\n tabActivationDirection\n } = useTabsRootContext();\n const {\n activateOnFocus,\n highlightedTabIndex,\n onTabActivation,\n registerTabResizeObserverElement,\n setHighlightedTabIndex,\n tabsListElement\n } = useTabsListContext();\n const id = useBaseUiId(idProp);\n const tabMetadata = React.useMemo(() => ({\n disabled,\n id,\n value\n }), [disabled, id, value]);\n const {\n compositeProps,\n compositeRef,\n index\n // hook is used instead of the CompositeItem component\n // because the index is needed for Tab internals\n } = useCompositeItem({\n metadata: tabMetadata\n });\n const active = value === activeTabValue;\n const isNavigatingRef = React.useRef(false);\n const tabElementRef = React.useRef(null);\n useIsoLayoutEffect(() => {\n const tabElement = tabElementRef.current;\n if (!tabElement) {\n return undefined;\n }\n return registerTabResizeObserverElement(tabElement);\n }, [registerTabResizeObserverElement]);\n\n // Keep the highlighted item in sync with the currently active tab\n // when the value prop changes externally (controlled mode)\n useIsoLayoutEffect(() => {\n if (isNavigatingRef.current) {\n isNavigatingRef.current = false;\n return;\n }\n if (!(active && index > -1 && highlightedTabIndex !== index)) {\n return;\n }\n\n // If focus is currently within the tabs list, don't override the roving\n // focus highlight. This keeps keyboard navigation relative to the focused\n // item after an external/asynchronous selection change.\n const listElement = tabsListElement;\n if (listElement != null) {\n const activeEl = activeElement(ownerDocument(listElement));\n if (activeEl && contains(listElement, activeEl)) {\n return;\n }\n }\n\n // Don't highlight disabled tabs to prevent them from interfering with keyboard navigation.\n // Keyboard focus (tabIndex) should remain on an enabled tab even when a disabled tab is selected.\n if (!disabled) {\n setHighlightedTabIndex(index);\n }\n }, [active, index, highlightedTabIndex, setHighlightedTabIndex, disabled, tabsListElement]);\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton,\n focusableWhenDisabled: true\n });\n const tabPanelId = getTabPanelIdByValue(value);\n const isPressingRef = React.useRef(false);\n const isMainButtonRef = React.useRef(false);\n function onClick(event) {\n if (active || disabled) {\n return;\n }\n onTabActivation(value, createChangeEventDetails(REASONS.none, event.nativeEvent, undefined, {\n activationDirection: 'none'\n }));\n }\n function onFocus(event) {\n if (active) {\n return;\n }\n\n // Only highlight enabled tabs when focused (disabled tabs remain focusable via focusableWhenDisabled).\n if (index > -1 && !disabled) {\n setHighlightedTabIndex(index);\n }\n if (disabled) {\n return;\n }\n if (activateOnFocus && (!isPressingRef.current ||\n // keyboard or touch focus\n isPressingRef.current && isMainButtonRef.current) // mouse focus\n ) {\n onTabActivation(value, createChangeEventDetails(REASONS.none, event.nativeEvent, undefined, {\n activationDirection: 'none'\n }));\n }\n }\n function onPointerDown(event) {\n if (active || disabled) {\n return;\n }\n isPressingRef.current = true;\n function handlePointerUp() {\n isPressingRef.current = false;\n isMainButtonRef.current = false;\n }\n if (!event.button || event.button === 0) {\n isMainButtonRef.current = true;\n const doc = ownerDocument(event.currentTarget);\n doc.addEventListener('pointerup', handlePointerUp, {\n once: true\n });\n }\n }\n const state = {\n disabled,\n active,\n orientation,\n tabActivationDirection\n };\n const element = useRenderElement('button', componentProps, {\n state,\n ref: [forwardedRef, buttonRef, compositeRef, tabElementRef],\n props: [compositeProps, {\n role: 'tab',\n 'aria-controls': tabPanelId,\n 'aria-selected': active,\n id,\n onClick,\n onFocus,\n onPointerDown,\n [ACTIVE_COMPOSITE_ITEM]: active ? '' : undefined,\n onKeyDownCapture() {\n isNavigatingRef.current = true;\n }\n }, elementProps, getButtonProps],\n stateAttributesMapping: tabsStateAttributesMapping\n });\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") TabsTab.displayName = \"TabsTab\";","// This file is autogenerated. Do not edit it directly.\n// To update it, modify the corresponding source file and run `pnpm inline-scripts`.\n\n// prettier-ignore\nexport const script = '!function(){const t=document.currentScript.previousElementSibling;if(!t)return;const e=t.closest(\\'[role=\"tablist\"]\\');if(!e)return;const i=e.querySelector(\"[data-active]\");if(!i)return;if(0===i.offsetWidth||0===e.offsetWidth)return;let o=0,n=0,h=0,l=0,r=0,f=0;function s(t){const e=getComputedStyle(t);let i=parseFloat(e.width)||0,o=parseFloat(e.height)||0;return(Math.round(i)!==t.offsetWidth||Math.round(o)!==t.offsetHeight)&&(i=t.offsetWidth,o=t.offsetHeight),{width:i,height:o}}if(null!=i&&null!=e){const{width:t,height:c}=s(i),{width:u,height:d}=s(e),a=i.getBoundingClientRect(),g=e.getBoundingClientRect(),p=u>0?g.width/u:1,b=d>0?g.height/d:1;if(Math.abs(p)>Number.EPSILON&&Math.abs(b)>Number.EPSILON){const t=a.left-g.left,i=a.top-g.top;o=t/p+e.scrollLeft-e.clientLeft,h=i/b+e.scrollTop-e.clientTop}else o=i.offsetLeft,h=i.offsetTop;r=t,f=c,n=e.scrollWidth-o-r,l=e.scrollHeight-h-f}function c(e,i){t.style.setProperty(`--active-tab-${e}`,`${i}px`)}c(\"left\",o),c(\"right\",n),c(\"top\",h),c(\"bottom\",l),c(\"width\",r),c(\"height\",f),r>0&&f>0&&t.removeAttribute(\"hidden\")}();';","export let TabsIndicatorCssVars = /*#__PURE__*/function (TabsIndicatorCssVars) {\n /**\n * Indicates the distance on the left side from the parent's container if the tab is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabLeft\"] = \"--active-tab-left\";\n /**\n * Indicates the distance on the right side from the parent's container if the tab is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabRight\"] = \"--active-tab-right\";\n /**\n * Indicates the distance on the top side from the parent's container if the tab is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabTop\"] = \"--active-tab-top\";\n /**\n * Indicates the distance on the bottom side from the parent's container if the tab is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabBottom\"] = \"--active-tab-bottom\";\n /**\n * Indicates the width of the tab if it is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabWidth\"] = \"--active-tab-width\";\n /**\n * Indicates the height of the tab if it is active.\n * @type {number}\n */\n TabsIndicatorCssVars[\"activeTabHeight\"] = \"--active-tab-height\";\n return TabsIndicatorCssVars;\n}({});","'use client';\n\nimport * as React from 'react';\nimport { useForcedRerendering } from '@base-ui/utils/useForcedRerendering';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { getCssDimensions } from \"../../utils/getCssDimensions.mjs\";\nimport { useIsHydrating } from \"../../utils/useIsHydrating.mjs\";\nimport { useTabsRootContext } from \"../root/TabsRootContext.mjs\";\nimport { tabsStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useTabsListContext } from \"../list/TabsListContext.mjs\";\nimport { script as prehydrationScript } from \"./prehydrationScript.min.mjs\";\nimport { TabsIndicatorCssVars } from \"./TabsIndicatorCssVars.mjs\";\nimport { useCSPContext } from \"../../internals/csp-context/CSPContext.mjs\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst stateAttributesMapping = {\n ...tabsStateAttributesMapping,\n activeTabPosition: () => null,\n activeTabSize: () => null\n};\n\n/**\n * A visual indicator that can be styled to match the position of the currently active tab.\n * Renders a `<span>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nexport const TabsIndicator = /*#__PURE__*/React.forwardRef(function TabsIndicator(componentProps, forwardedRef) {\n const {\n className,\n render,\n renderBeforeHydration = false,\n style: styleProp,\n ...elementProps\n } = componentProps;\n const {\n nonce\n } = useCSPContext();\n const {\n getTabElementBySelectedValue,\n orientation,\n tabActivationDirection,\n value\n } = useTabsRootContext();\n const {\n tabsListElement,\n registerIndicatorUpdateListener\n } = useTabsListContext();\n const isHydrating = useIsHydrating();\n const rerender = useForcedRerendering();\n React.useEffect(() => {\n return registerIndicatorUpdateListener(rerender);\n }, [registerIndicatorUpdateListener, rerender]);\n let left = 0;\n let right = 0;\n let top = 0;\n let bottom = 0;\n let width = 0;\n let height = 0;\n let isTabSelected = false;\n if (value != null && tabsListElement != null) {\n const activeTab = getTabElementBySelectedValue(value);\n if (activeTab != null) {\n isTabSelected = true;\n const {\n width: computedWidth,\n height: computedHeight\n } = getCssDimensions(activeTab);\n const {\n width: tabListWidth,\n height: tabListHeight\n } = getCssDimensions(tabsListElement);\n const tabRect = activeTab.getBoundingClientRect();\n const tabsListRect = tabsListElement.getBoundingClientRect();\n const scaleX = tabListWidth > 0 ? tabsListRect.width / tabListWidth : 1;\n const scaleY = tabListHeight > 0 ? tabsListRect.height / tabListHeight : 1;\n const hasNonZeroScale = Math.abs(scaleX) > Number.EPSILON && Math.abs(scaleY) > Number.EPSILON;\n if (hasNonZeroScale) {\n const tabLeftDelta = tabRect.left - tabsListRect.left;\n const tabTopDelta = tabRect.top - tabsListRect.top;\n left = tabLeftDelta / scaleX + tabsListElement.scrollLeft - tabsListElement.clientLeft;\n top = tabTopDelta / scaleY + tabsListElement.scrollTop - tabsListElement.clientTop;\n } else {\n left = activeTab.offsetLeft;\n top = activeTab.offsetTop;\n }\n width = computedWidth;\n height = computedHeight;\n right = tabsListElement.scrollWidth - left - width;\n bottom = tabsListElement.scrollHeight - top - height;\n }\n }\n const activeTabPosition = isTabSelected ? {\n left,\n right,\n top,\n bottom\n } : null;\n const activeTabSize = isTabSelected ? {\n width,\n height\n } : null;\n const style = isTabSelected ? {\n [TabsIndicatorCssVars.activeTabLeft]: `${left}px`,\n [TabsIndicatorCssVars.activeTabRight]: `${right}px`,\n [TabsIndicatorCssVars.activeTabTop]: `${top}px`,\n [TabsIndicatorCssVars.activeTabBottom]: `${bottom}px`,\n [TabsIndicatorCssVars.activeTabWidth]: `${width}px`,\n [TabsIndicatorCssVars.activeTabHeight]: `${height}px`\n } : undefined;\n const displayIndicator = isTabSelected && width > 0 && height > 0;\n const state = {\n orientation,\n activeTabPosition,\n activeTabSize,\n tabActivationDirection\n };\n const element = useRenderElement('span', componentProps, {\n state,\n ref: forwardedRef,\n props: [{\n role: 'presentation',\n style,\n hidden: !displayIndicator // do not display the indicator before the layout is settled\n }, elementProps, {\n suppressHydrationWarning: true\n }],\n stateAttributesMapping\n });\n if (value == null) {\n return null;\n }\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [element, isHydrating && renderBeforeHydration && /*#__PURE__*/_jsx(\"script\", {\n nonce: nonce\n // eslint-disable-next-line react/no-danger\n ,\n dangerouslySetInnerHTML: {\n __html: prehydrationScript\n },\n suppressHydrationWarning: true\n })]\n });\n});\nif (process.env.NODE_ENV !== \"production\") TabsIndicator.displayName = \"TabsIndicator\";","import { TransitionStatusDataAttributes } from \"../../internals/stateAttributesMapping.mjs\";\nexport let TabsPanelDataAttributes = function (TabsPanelDataAttributes) {\n /**\n * Indicates the index of the tab panel.\n */\n TabsPanelDataAttributes[\"index\"] = \"data-index\";\n /**\n * Indicates the direction of the activation (based on the previous active tab).\n * @type {'left' | 'right' | 'up' | 'down' | 'none'}\n */\n TabsPanelDataAttributes[\"activationDirection\"] = \"data-activation-direction\";\n /**\n * Indicates the orientation of the tabs.\n * @type {'horizontal' | 'vertical'}\n */\n TabsPanelDataAttributes[\"orientation\"] = \"data-orientation\";\n /**\n * Present when the panel is hidden.\n */\n TabsPanelDataAttributes[\"hidden\"] = \"data-hidden\";\n /**\n * Present when the panel is animating in.\n */\n TabsPanelDataAttributes[TabsPanelDataAttributes[\"startingStyle\"] = TransitionStatusDataAttributes.startingStyle] = \"startingStyle\";\n /**\n * Present when the panel is animating out.\n */\n TabsPanelDataAttributes[TabsPanelDataAttributes[\"endingStyle\"] = TransitionStatusDataAttributes.endingStyle] = \"endingStyle\";\n return TabsPanelDataAttributes;\n}({});","'use client';\n\nimport * as React from 'react';\nimport { inertValue } from '@base-ui/utils/inertValue';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useCompositeListItem } from \"../../internals/composite/list/useCompositeListItem.mjs\";\nimport { tabsStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useTabsRootContext } from \"../root/TabsRootContext.mjs\";\nimport { TabsPanelDataAttributes } from \"./TabsPanelDataAttributes.mjs\";\nconst stateAttributesMapping = {\n ...tabsStateAttributesMapping,\n ...transitionStatusMapping\n};\n\n/**\n * A panel displayed when the corresponding tab is active.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nexport const TabsPanel = /*#__PURE__*/React.forwardRef(function TabsPanel(componentProps, forwardedRef) {\n const {\n className,\n value,\n render,\n keepMounted = false,\n style,\n ...elementProps\n } = componentProps;\n const {\n value: selectedValue,\n getTabIdByPanelValue,\n orientation,\n tabActivationDirection,\n registerMountedTabPanel,\n unregisterMountedTabPanel\n } = useTabsRootContext();\n const id = useBaseUiId();\n const metadata = React.useMemo(() => ({\n id,\n value\n }), [id, value]);\n const {\n ref: listItemRef,\n index\n } = useCompositeListItem({\n metadata\n });\n const open = value === selectedValue;\n const {\n mounted,\n transitionStatus,\n setMounted\n } = useTransitionStatus(open);\n const hidden = !mounted;\n const correspondingTabId = getTabIdByPanelValue(value);\n const state = {\n hidden,\n orientation,\n tabActivationDirection,\n transitionStatus\n };\n const panelRef = React.useRef(null);\n const element = useRenderElement('div', componentProps, {\n state,\n ref: [forwardedRef, listItemRef, panelRef],\n props: [{\n 'aria-labelledby': correspondingTabId,\n hidden,\n id,\n role: 'tabpanel',\n tabIndex: open ? 0 : -1,\n inert: inertValue(!open),\n [TabsPanelDataAttributes.index]: index\n }, elementProps],\n stateAttributesMapping\n });\n useOpenChangeComplete({\n open,\n ref: panelRef,\n onComplete() {\n if (!open) {\n setMounted(false);\n }\n }\n });\n useIsoLayoutEffect(() => {\n if (hidden && !keepMounted) {\n return undefined;\n }\n if (id == null) {\n return undefined;\n }\n registerMountedTabPanel(value, id);\n return () => {\n unregisterMountedTabPanel(value, id);\n };\n }, [hidden, keepMounted, value, id, registerMountedTabPanel, unregisterMountedTabPanel]);\n const shouldRender = keepMounted || mounted;\n if (!shouldRender) {\n return null;\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") TabsPanel.displayName = \"TabsPanel\";","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { EMPTY_ARRAY } from '@base-ui/utils/empty';\nimport { CompositeRoot } from \"../../internals/composite/root/CompositeRoot.mjs\";\nimport { tabsStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useTabsRootContext } from \"../root/TabsRootContext.mjs\";\nimport { TabsListContext } from \"./TabsListContext.mjs\";\n\n/**\n * Groups the individual tab buttons.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const TabsList = /*#__PURE__*/React.forwardRef(function TabsList(componentProps, forwardedRef) {\n const {\n activateOnFocus = false,\n className,\n loopFocus = true,\n render,\n style,\n ...elementProps\n } = componentProps;\n const {\n onValueChange,\n orientation,\n value,\n setTabMap,\n tabActivationDirection\n } = useTabsRootContext();\n const [highlightedTabIndex, setHighlightedTabIndex] = React.useState(0);\n const [tabsListElement, setTabsListElement] = React.useState(null);\n const indicatorUpdateListenersRef = React.useRef(new Set());\n const tabResizeObserverElementsRef = React.useRef(new Set());\n const resizeObserverRef = React.useRef(null);\n useIsoLayoutEffect(() => {\n if (typeof ResizeObserver === 'undefined') {\n return undefined;\n }\n const resizeObserver = new ResizeObserver(() => {\n indicatorUpdateListenersRef.current.forEach(listener => {\n listener();\n });\n });\n resizeObserverRef.current = resizeObserver;\n if (tabsListElement) {\n resizeObserver.observe(tabsListElement);\n }\n tabResizeObserverElementsRef.current.forEach(element => {\n resizeObserver.observe(element);\n });\n return () => {\n resizeObserver.disconnect();\n resizeObserverRef.current = null;\n };\n }, [tabsListElement]);\n const registerIndicatorUpdateListener = useStableCallback(listener => {\n indicatorUpdateListenersRef.current.add(listener);\n return () => {\n indicatorUpdateListenersRef.current.delete(listener);\n };\n });\n const registerTabResizeObserverElement = useStableCallback(element => {\n tabResizeObserverElementsRef.current.add(element);\n resizeObserverRef.current?.observe(element);\n return () => {\n tabResizeObserverElementsRef.current.delete(element);\n resizeObserverRef.current?.unobserve(element);\n };\n });\n const onTabActivation = useStableCallback((newValue, eventDetails) => {\n if (newValue !== value) {\n onValueChange(newValue, eventDetails);\n }\n });\n const state = {\n orientation,\n tabActivationDirection\n };\n const defaultProps = {\n 'aria-orientation': orientation === 'vertical' ? 'vertical' : undefined,\n role: 'tablist'\n };\n const tabsListContextValue = React.useMemo(() => ({\n activateOnFocus,\n highlightedTabIndex,\n registerIndicatorUpdateListener,\n registerTabResizeObserverElement,\n onTabActivation,\n setHighlightedTabIndex,\n tabsListElement\n }), [activateOnFocus, highlightedTabIndex, registerIndicatorUpdateListener, registerTabResizeObserverElement, onTabActivation, setHighlightedTabIndex, tabsListElement]);\n return /*#__PURE__*/_jsx(TabsListContext.Provider, {\n value: tabsListContextValue,\n children: /*#__PURE__*/_jsx(CompositeRoot, {\n render: render,\n className: className,\n style: style,\n state: state,\n refs: [forwardedRef, setTabsListElement],\n props: [defaultProps, elementProps],\n stateAttributesMapping: tabsStateAttributesMapping,\n highlightedIndex: highlightedTabIndex,\n enableHomeAndEndKeys: true,\n loopFocus: loopFocus,\n orientation: orientation,\n onHighlightedIndexChange: setHighlightedTabIndex,\n onMapChange: setTabMap,\n disabledIndices: EMPTY_ARRAY\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") TabsList.displayName = \"TabsList\";","'use client';\n\nimport { Tabs as TabsPrimitive } from '@base-ui/react/tabs';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\n// ============================================\n// TabsList Variants\n// ============================================\n\nconst tabsListVariants = cva(\n 'group/tabs-list inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col',\n {\n variants: {\n variant: {\n // Primary variants\n boxed:\n 'bg-muted rounded-lg p-[3px] overflow-clip group-data-[orientation=vertical]/tabs:gap-1',\n pill: 'bg-muted rounded-full p-[3px] overflow-clip group-data-[orientation=vertical]/tabs:gap-1',\n bordered:\n 'gap-3 bg-transparent relative pb-0 w-full rounded-none overflow-x-auto after:absolute after:bottom-0 after:inset-x-0 after:h-px after:bg-border after:z-0 group-data-[orientation=vertical]/tabs:overflow-x-visible group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:inset-x-auto group-data-[orientation=vertical]/tabs:after:left-0 group-data-[orientation=vertical]/tabs:after:w-px group-data-[orientation=vertical]/tabs:after:h-auto group-data-[orientation=vertical]/tabs:w-fit',\n lifted:\n 'gap-0 bg-transparent relative w-full rounded-none overflow-x-auto after:absolute after:bottom-0 after:inset-x-0 after:h-px after:bg-border after:z-0 group-data-[orientation=vertical]/tabs:overflow-x-visible',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n align: {\n start: '',\n center: '',\n end: '',\n stretch: '',\n },\n borderPosition: {\n bottom: '',\n top: '',\n },\n },\n compoundVariants: [\n // Size applies container height for boxed/pill variants\n {\n variant: 'boxed',\n size: 'sm',\n className: 'group-data-[orientation=horizontal]/tabs:h-[38px]',\n },\n {\n variant: 'boxed',\n size: 'md',\n className: 'group-data-[orientation=horizontal]/tabs:h-[42px]',\n },\n {\n variant: 'boxed',\n size: 'lg',\n className: 'group-data-[orientation=horizontal]/tabs:h-[46px]',\n },\n {\n variant: 'pill',\n size: 'sm',\n className: 'group-data-[orientation=horizontal]/tabs:h-[38px]',\n },\n {\n variant: 'pill',\n size: 'md',\n className: 'group-data-[orientation=horizontal]/tabs:h-[42px]',\n },\n {\n variant: 'pill',\n size: 'lg',\n className: 'group-data-[orientation=horizontal]/tabs:h-[46px]',\n },\n // Alignment for bordered variant\n { variant: 'bordered', align: 'start', className: 'justify-start' },\n { variant: 'bordered', align: 'center', className: 'justify-center' },\n { variant: 'bordered', align: 'end', className: 'justify-end' },\n { variant: 'bordered', align: 'stretch', className: 'justify-start' },\n // Alignment for lifted variant\n { variant: 'lifted', align: 'start', className: 'justify-start' },\n { variant: 'lifted', align: 'center', className: 'justify-center' },\n { variant: 'lifted', align: 'end', className: 'justify-end' },\n { variant: 'lifted', align: 'stretch', className: 'justify-start' },\n // Border position top for bordered/lifted\n {\n variant: 'bordered',\n borderPosition: 'top',\n className: 'after:bottom-auto after:top-0',\n },\n {\n variant: 'lifted',\n borderPosition: 'top',\n className: 'after:bottom-auto after:top-0',\n },\n ],\n defaultVariants: {\n variant: 'boxed',\n size: 'md',\n align: 'start',\n borderPosition: 'bottom',\n },\n },\n);\n\ntype TabsListVariantProps = VariantProps<typeof tabsListVariants>;\n\ninterface TabsListProps extends TabsPrimitive.List.Props, TabsListVariantProps {\n /** Enable gradient styling on active tab */\n gradient?: boolean;\n}\n\n// ============================================\n// TabsTrigger Variants\n// ============================================\n\nconst tabsTriggerVariants = cva([\n // Base\n 'relative inline-flex items-center justify-center whitespace-nowrap',\n 'gap-1.5 border border-transparent font-medium',\n 'transition-[color,background-color,border-color,box-shadow,opacity] duration-200 ease-smooth motion-reduce:transition-none',\n 'group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:outline-1',\n 'disabled:pointer-events-none disabled:text-muted-foreground disabled:opacity-70',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n 'text-foreground',\n\n // Size: sm\n 'group-data-[size=sm]/tabs-list:h-9 group-data-[size=sm]/tabs-list:px-2 group-data-[size=sm]/tabs-list:py-1 group-data-[size=sm]/tabs-list:text-sm',\n \"group-data-[size=sm]/tabs-list:[&_svg:not([class*='size-'])]:size-4\",\n // Size: md\n 'group-data-[size=md]/tabs-list:h-10 group-data-[size=md]/tabs-list:px-2.5 group-data-[size=md]/tabs-list:py-[5px] group-data-[size=md]/tabs-list:text-sm',\n \"group-data-[size=md]/tabs-list:[&_svg:not([class*='size-'])]:size-4\",\n // Size: lg\n 'group-data-[size=lg]/tabs-list:h-11 group-data-[size=lg]/tabs-list:px-3 group-data-[size=lg]/tabs-list:py-2 group-data-[size=lg]/tabs-list:text-base',\n \"group-data-[size=lg]/tabs-list:[&_svg:not([class*='size-'])]:size-5\",\n\n // Boxed variant\n 'group-data-[variant=boxed]/tabs-list:rounded-[10px] group-data-[variant=boxed]/tabs-list:flex-1 group-data-[variant=boxed]/tabs-list:h-[calc(100%-1px)]',\n 'group-data-[variant=boxed]/tabs-list:data-active:bg-secondary group-data-[variant=boxed]/tabs-list:data-active:shadow-sm group-data-[variant=boxed]/tabs-list:data-active:text-foreground',\n 'group-data-[variant=boxed]/tabs-list:hover:bg-accent',\n 'group-data-[orientation=vertical]/tabs:group-data-[variant=boxed]/tabs-list:flex-initial group-data-[orientation=vertical]/tabs:group-data-[variant=boxed]/tabs-list:justify-center',\n\n // Pill variant\n 'group-data-[variant=pill]/tabs-list:rounded-full group-data-[variant=pill]/tabs-list:flex-1 group-data-[variant=pill]/tabs-list:h-[calc(100%-1px)]',\n 'group-data-[variant=pill]/tabs-list:data-active:bg-background group-data-[variant=pill]/tabs-list:data-active:shadow-sm group-data-[variant=pill]/tabs-list:data-active:text-foreground',\n 'group-data-[variant=pill]/tabs-list:hover:bg-accent',\n 'dark:group-data-[variant=pill]/tabs-list:data-active:bg-accent dark:group-data-[variant=pill]/tabs-list:data-active:text-accent-foreground dark:group-data-[variant=pill]/tabs-list:data-active:border-input',\n 'group-data-[orientation=vertical]/tabs:group-data-[variant=pill]/tabs-list:flex-initial group-data-[orientation=vertical]/tabs:group-data-[variant=pill]/tabs-list:justify-center',\n\n // Bordered variant\n 'group-data-[variant=bordered]/tabs-list:bg-transparent group-data-[variant=bordered]/tabs-list:rounded-none',\n 'group-data-[variant=bordered]/tabs-list:pb-2.5 group-data-[variant=bordered]/tabs-list:flex-initial',\n 'group-data-[variant=bordered]/tabs-list:data-active:bg-background group-data-[variant=bordered]/tabs-list:data-active:text-primary group-data-[variant=bordered]/tabs-list:data-active:shadow-none',\n 'group-data-[variant=bordered]/tabs-list:group-data-[align=stretch]/tabs-list:flex-1',\n 'group-data-[variant=bordered]/tabs-list:after:bg-primary/90 group-data-[variant=bordered]/tabs-list:after:absolute group-data-[variant=bordered]/tabs-list:after:bottom-0 group-data-[variant=bordered]/tabs-list:after:inset-x-0 group-data-[variant=bordered]/tabs-list:after:h-0.5 group-data-[variant=bordered]/tabs-list:after:z-10 group-data-[variant=bordered]/tabs-list:after:opacity-0 group-data-[variant=bordered]/tabs-list:after:transition-opacity group-data-[variant=bordered]/tabs-list:after:duration-200 group-data-[variant=bordered]/tabs-list:after:ease-out',\n 'group-data-[variant=bordered]/tabs-list:data-active:after:opacity-100',\n 'group-data-[variant=bordered]/tabs-list:hover:after:opacity-100 group-data-[variant=bordered]/tabs-list:hover:after:bg-primary/20',\n 'group-data-[variant=bordered]/tabs-list:data-active:hover:after:bg-primary/90',\n 'group-data-[variant=bordered]/tabs-list:group-data-[border-position=top]/tabs-list:after:bottom-auto group-data-[variant=bordered]/tabs-list:group-data-[border-position=top]/tabs-list:after:top-0',\n 'group-data-[variant=bordered]/tabs-list:group-data-[border-position=top]/tabs-list:pb-0 group-data-[variant=bordered]/tabs-list:group-data-[border-position=top]/tabs-list:pt-2.5',\n 'group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:inset-x-auto group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:inset-y-0 group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:left-0 group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:w-0.5 group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:after:h-auto',\n 'group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:pb-0 group-data-[orientation=vertical]/tabs:group-data-[variant=bordered]/tabs-list:pl-2.5',\n\n // Lifted variant — browser-tab style with curved corner connectors\n 'group-data-[variant=lifted]/tabs-list:flex-initial',\n 'group-data-[variant=lifted]/tabs-list:rounded-t-md',\n 'group-data-[variant=lifted]/tabs-list:border-b group-data-[variant=lifted]/tabs-list:border-b-border',\n 'group-data-[variant=lifted]/tabs-list:text-foreground',\n 'group-data-[variant=lifted]/tabs-list:data-active:bg-background',\n 'group-data-[variant=lifted]/tabs-list:data-active:text-primary',\n 'group-data-[variant=lifted]/tabs-list:data-active:border group-data-[variant=lifted]/tabs-list:data-active:border-border',\n 'group-data-[variant=lifted]/tabs-list:data-active:border-b-0 group-data-[variant=lifted]/tabs-list:data-active:border-b-background',\n 'group-data-[variant=lifted]/tabs-list:data-active:rounded-t-[10px]',\n 'group-data-[variant=lifted]/tabs-list:data-active:mb-[-1px] group-data-[variant=lifted]/tabs-list:data-active:z-10',\n 'group-data-[variant=lifted]/tabs-list:data-active:before:absolute group-data-[variant=lifted]/tabs-list:data-active:before:bottom-0 group-data-[variant=lifted]/tabs-list:data-active:before:left-[-10px] group-data-[variant=lifted]/tabs-list:data-active:before:size-[10px] group-data-[variant=lifted]/tabs-list:data-active:before:rounded-br-[10px] group-data-[variant=lifted]/tabs-list:data-active:before:border-b group-data-[variant=lifted]/tabs-list:data-active:before:border-r group-data-[variant=lifted]/tabs-list:data-active:before:border-border group-data-[variant=lifted]/tabs-list:data-active:before:bg-background group-data-[variant=lifted]/tabs-list:data-active:before:shadow-[2px_2px_0_0_var(--background)]',\n 'group-data-[variant=lifted]/tabs-list:data-active:after:absolute group-data-[variant=lifted]/tabs-list:data-active:after:bottom-0 group-data-[variant=lifted]/tabs-list:data-active:after:right-[-10px] group-data-[variant=lifted]/tabs-list:data-active:after:size-[10px] group-data-[variant=lifted]/tabs-list:data-active:after:rounded-bl-[10px] group-data-[variant=lifted]/tabs-list:data-active:after:border-b group-data-[variant=lifted]/tabs-list:data-active:after:border-l group-data-[variant=lifted]/tabs-list:data-active:after:border-border group-data-[variant=lifted]/tabs-list:data-active:after:bg-background group-data-[variant=lifted]/tabs-list:data-active:after:shadow-[-2px_2px_0_0_var(--background)]',\n 'group-data-[variant=lifted]/tabs-list:group-data-[align=stretch]/tabs-list:flex-1',\n\n // Gradient support (uses brand tokens)\n 'group-data-[variant=boxed]/tabs-list:group-data-[gradient]/tabs-list:data-active:bg-[linear-gradient(100deg,var(--air-100)/0.1,var(--primary)/0.1)] group-data-[variant=boxed]/tabs-list:group-data-[gradient]/tabs-list:data-active:text-primary',\n 'group-data-[variant=pill]/tabs-list:group-data-[gradient]/tabs-list:data-active:bg-[linear-gradient(98deg,var(--air-100),var(--primary))] group-data-[variant=pill]/tabs-list:group-data-[gradient]/tabs-list:data-active:text-primary-foreground',\n\n // Hide pseudo-element underline when TabsIndicator is used\n 'group-has-[[data-slot=tabs-indicator]]/tabs-list:after:hidden',\n]);\n\n// ============================================\n// Components\n// ============================================\n\nconst Tabs = React.forwardRef<HTMLDivElement, TabsPrimitive.Root.Props>(\n ({ className, orientation = 'horizontal', ...props }, ref) => (\n <TabsPrimitive.Root\n ref={ref}\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\n 'gap-2 group/tabs flex data-[orientation=horizontal]:flex-col',\n className,\n )}\n {...props}\n />\n ),\n);\n\nconst TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n (\n {\n className,\n variant = 'boxed',\n size = 'md',\n align = 'start',\n borderPosition = 'bottom',\n gradient,\n ...props\n },\n ref,\n ) => {\n return (\n <TabsPrimitive.List\n ref={ref}\n data-slot=\"tabs-list\"\n data-variant={variant}\n data-align={align}\n data-size={size}\n data-border-position={borderPosition}\n {...(gradient ? { 'data-gradient': '' } : {})}\n className={cn(\n tabsListVariants({ variant, size, align, borderPosition }),\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nconst TabsTrigger = React.forwardRef<\n HTMLButtonElement,\n TabsPrimitive.Tab.Props\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Tab\n ref={ref}\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants(), className)}\n {...props}\n />\n));\n\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsPrimitive.Panel.Props>(\n ({ className, ...props }, ref) => (\n <TabsPrimitive.Panel\n ref={ref}\n data-slot=\"tabs-content\"\n className={cn(\n 'flex-1 focus-visible:outline-none delight-fade-in',\n className,\n )}\n {...props}\n />\n ),\n);\n\n/**\n * Animated indicator that slides to the active tab position.\n * Use with `variant=\"bordered\"` on TabsList.\n *\n * @example\n * ```tsx\n * <TabsList variant=\"bordered\">\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * <TabsIndicator />\n * </TabsList>\n * ```\n */\nconst TabsIndicator = React.forwardRef<\n HTMLSpanElement,\n TabsPrimitive.Indicator.Props\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Indicator\n ref={ref}\n data-slot=\"tabs-indicator\"\n className={cn(\n 'absolute bottom-0 left-0 h-0.5 z-10 bg-primary/90',\n 'w-[var(--active-tab-width)]',\n // Width must be layout-animated (Base UI constraint); transform is GPU-composited\n 'transition-[transform,width] duration-300 ease-smooth motion-reduce:transition-none',\n className,\n )}\n style={{\n transform: 'translateX(var(--active-tab-left, 0px))',\n }}\n {...props}\n />\n));\n\nTabs.displayName = 'Tabs';\nTabsList.displayName = 'TabsList';\nTabsTrigger.displayName = 'TabsTrigger';\nTabsContent.displayName = 'TabsContent';\nTabsIndicator.displayName = 'TabsIndicator';\n\nexport {\n Tabs,\n TabsContent,\n TabsIndicator,\n TabsList,\n TabsTrigger,\n tabsListVariants,\n tabsTriggerVariants,\n};\n","'use client';\n\n/**\n * Tabs Component\n *\n * A flexible tabs component with multiple visual variants.\n *\n * ## Variants\n *\n * Pass `variant` prop to `TabsList`:\n *\n * - **boxed** - Tabs with muted background container (default)\n * - **pill** - Fully rounded tabs with muted background\n * - **bordered** - Transparent background with bottom border indicator\n * - **lifted** - Browser-tab style with active tab lifted above border\n *\n * ## Usage\n *\n * ```tsx\n * // Boxed variant (default)\n * <Tabs defaultValue=\"tab1\">\n * <TabsList variant=\"boxed\">\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * </TabsList>\n * </Tabs>\n *\n * // Bordered variant with counts\n * <Tabs defaultValue=\"all\">\n * <TabsList variant=\"bordered\">\n * <TabsTriggerWithCount value=\"all\" count={5} isActive>All</TabsTriggerWithCount>\n * <TabsTriggerWithCount value=\"mine\" count={3}>Mine</TabsTriggerWithCount>\n * </TabsList>\n * </Tabs>\n *\n * // With icons\n * <Tabs defaultValue=\"home\">\n * <TabsList variant=\"boxed\" size=\"md\">\n * <TabsTrigger value=\"home\" icon={<Home />}>Home</TabsTrigger>\n * <TabsTrigger value=\"settings\" icon={<Settings />}>Settings</TabsTrigger>\n * </TabsList>\n * </Tabs>\n *\n * // Pill variant with gradient\n * <Tabs defaultValue=\"tab1\">\n * <TabsList variant=\"pill\" gradient>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * </Tabs>\n *\n * // Animated indicator (smooth sliding underline)\n * <Tabs defaultValue=\"tab1\">\n * <TabsList variant=\"bordered\">\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * <TabsIndicator />\n * </TabsList>\n * </Tabs>\n * ```\n *\n * @module Tabs\n */\n\nimport { Tabs as TabsPrimitive } from '@base-ui/react/tabs';\nimport type { VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\nimport { Badge } from '@/components/atoms/display/Badge';\nimport { tabsListVariants, tabsTriggerVariants } from '@/components/ui/tabs';\nimport { useControllableState } from '@/hooks/use-controllable-state';\nimport { cn } from '@/lib/utils';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface TabsProps\n extends Omit<TabsPrimitive.Root.Props, 'onValueChange'> {\n /** Controlled active tab value. When provided, component is controlled. */\n value?: string;\n /** Initial active tab for uncontrolled mode */\n defaultValue?: string;\n /** Callback when active tab changes */\n onValueChange?: (value: string) => void;\n}\n\nexport interface TabsListProps\n extends TabsPrimitive.List.Props,\n VariantProps<typeof tabsListVariants> {\n /** Enable gradient styling on active tab (boxed/pill variants only) */\n gradient?: boolean;\n}\n\nexport interface TabsTriggerProps extends TabsPrimitive.Tab.Props {\n /** Icon element to render in the tab */\n icon?: React.ReactNode;\n /** Position of the icon relative to text */\n iconPosition?: 'start' | 'top';\n /** Show a notification dot indicator */\n dot?: boolean;\n /** Badge element to render after the text (e.g., count or status badge) */\n badge?: React.ReactNode;\n}\n\nexport type TabsContentProps = TabsPrimitive.Panel.Props;\n\nexport type TabsIndicatorProps = TabsPrimitive.Indicator.Props;\n\nexport interface TabsTriggerWithCountProps extends TabsTriggerProps {\n /** Count to display in badge */\n count?: number;\n /** Whether this tab is currently active (used for badge styling) */\n isActive?: boolean;\n}\n\n// ============================================\n// TabsRoot (with controlled/uncontrolled support)\n// ============================================\n\nfunction TabsRoot({\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n children,\n className,\n ...props\n}: TabsProps) {\n const [value, setValue] = useControllableState({\n value: controlledValue,\n defaultValue: defaultValue ?? '',\n onChange: onValueChange,\n });\n\n const handleValueChange = React.useCallback(\n (newValue: string | null) => {\n if (newValue !== null) {\n setValue(newValue);\n }\n },\n [setValue],\n );\n\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n value={value}\n onValueChange={handleValueChange}\n className={cn(\n 'gap-2 group/tabs flex data-[orientation=horizontal]:flex-col',\n className,\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.Root>\n );\n}\n\n// ============================================\n// TabsList\n// ============================================\n\nfunction TabsList({\n className,\n variant = 'boxed',\n size = 'md',\n align = 'start',\n borderPosition = 'bottom',\n gradient,\n ...props\n}: TabsListProps) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n data-size={size}\n data-align={align}\n data-border-position={borderPosition}\n {...(gradient ? { 'data-gradient': '' } : {})}\n className={cn(\n tabsListVariants({ variant, size, align, borderPosition }),\n className,\n )}\n {...props}\n />\n );\n}\n\n// Trigger styles are provided by tabsTriggerVariants from the primitive (ui/tabs).\n// The molecule layers only icon/dot/badge-specific classes on top.\n\n// ============================================\n// TabsTrigger\n// ============================================\n\nfunction TabsTrigger({\n className,\n icon,\n iconPosition = 'start',\n dot,\n badge,\n children,\n ...props\n}: TabsTriggerProps) {\n const isIconOnly = icon && !children;\n\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n data-icon-position={iconPosition}\n data-icon-only={isIconOnly || undefined}\n className={cn(\n tabsTriggerVariants(),\n iconPosition === 'top' && 'flex-col gap-1 pb-6',\n isIconOnly && 'px-2',\n className,\n )}\n {...props}\n >\n {icon && (\n <span\n data-slot=\"tabs-trigger-icon\"\n className={cn(\n \"shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n iconPosition === 'top' &&\n \"[&_svg:not([class*='size-'])]:size-[18px]\",\n )}\n >\n {icon}\n </span>\n )}\n {children}\n {badge}\n {dot && (\n <span\n data-slot=\"tabs-trigger-dot\"\n className=\"absolute -top-0.5 -right-0.5 size-2 rounded-full bg-primary delight-status-pulse\"\n />\n )}\n </TabsPrimitive.Tab>\n );\n}\n\n// ============================================\n// TabsContent\n// ============================================\n\nfunction TabsContent({ className, ...props }: TabsContentProps) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\n 'flex-1 focus-visible:outline-none delight-fade-in',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ============================================\n// TabsIndicator\n// ============================================\n\n/**\n * Animated indicator that slides to the active tab position.\n * Use with `variant=\"bordered\"` on TabsList.\n *\n * @example\n * ```tsx\n * <TabsList variant=\"bordered\">\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * <TabsIndicator />\n * </TabsList>\n * ```\n */\nfunction TabsIndicator({ className, ...props }: TabsIndicatorProps) {\n return (\n <TabsPrimitive.Indicator\n data-slot=\"tabs-indicator\"\n className={cn(\n 'absolute bottom-0 left-0 h-0.5 z-10 bg-primary/90',\n 'w-[var(--active-tab-width)]',\n 'transition-[transform,width] duration-300 ease-smooth motion-reduce:transition-none',\n className,\n )}\n style={{\n transform: 'translateX(var(--active-tab-left, 0px))',\n }}\n {...props}\n />\n );\n}\n\n// ============================================\n// TabsTriggerWithCount - Extended trigger with badge count\n// ============================================\n\n/**\n * Extended tab trigger with an optional count badge.\n * Best used with the `bordered` variant for filter-style tabs.\n *\n * @example\n * ```tsx\n * <TabsList variant=\"bordered\">\n * <TabsTriggerWithCount value=\"all\" count={5} isActive>All Meetings</TabsTriggerWithCount>\n * <TabsTriggerWithCount value=\"my\" count={4}>My Meetings</TabsTriggerWithCount>\n * <TabsTriggerWithCount value=\"shared\" count={1}>Shared with me</TabsTriggerWithCount>\n * </TabsList>\n * ```\n */\nfunction TabsTriggerWithCount({\n children,\n count,\n isActive,\n className,\n ...props\n}: TabsTriggerWithCountProps) {\n return (\n <TabsTrigger className={cn('gap-2', className)} {...props}>\n {children}\n {count !== undefined && (\n <Badge\n variant=\"soft\"\n color={isActive ? 'primary' : 'secondary'}\n size=\"xs\"\n className=\"min-w-[18px]\"\n >\n {count}\n </Badge>\n )}\n </TabsTrigger>\n );\n}\n\n// ============================================\n// Display Names\n// ============================================\n\nTabsRoot.displayName = 'Tabs';\nTabsList.displayName = 'TabsList';\nTabsTrigger.displayName = 'TabsTrigger';\nTabsContent.displayName = 'TabsContent';\nTabsIndicator.displayName = 'TabsIndicator';\nTabsTriggerWithCount.displayName = 'TabsTriggerWithCount';\n\n// ============================================\n// Compound Component (Dot Notation)\n// ============================================\n\n/**\n * Tabs compound component with dot notation access to sub-components.\n *\n * @example\n * ```tsx\n * <Tabs defaultValue=\"tab1\">\n * <Tabs.List>\n * <Tabs.Trigger value=\"tab1\">Tab 1</Tabs.Trigger>\n * <Tabs.Trigger value=\"tab2\">Tab 2</Tabs.Trigger>\n * </Tabs.List>\n * <Tabs.Content value=\"tab1\">Content 1</Tabs.Content>\n * <Tabs.Content value=\"tab2\">Content 2</Tabs.Content>\n * </Tabs>\n * ```\n */\nconst Tabs = Object.assign(TabsRoot, {\n Root: TabsRoot,\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n Indicator: TabsIndicator,\n TriggerWithCount: TabsTriggerWithCount,\n});\n\nexport {\n Tabs,\n TabsContent,\n TabsIndicator,\n TabsList,\n TabsTrigger,\n TabsTriggerWithCount,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],"mappings":"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"}
|
package/dist/wc-react/Tooltip.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { f as r, p as G } from "./_shared.js";
|
|
2
2
|
import { a as H, i as J, n as K, o as M, r as Q, s as U, t as W } from "./TooltipProvider.js";
|
|
3
3
|
import { t as A } from "./dist.js";
|
|
4
|
-
import * as
|
|
4
|
+
import * as h from "react";
|
|
5
5
|
import { jsx as o, jsxs as f } from "react/jsx-runtime";
|
|
6
6
|
var X = A("data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 motion-reduce:animate-none z-50 w-fit max-w-xs origin-(--transform-origin) px-3 py-1.5 text-xs shadow-[var(--shadow-tooltip)]", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
|
9
9
|
primary: "bg-foreground text-background",
|
|
10
10
|
secondary: "bg-secondary text-secondary-foreground border border-border shadow-sm",
|
|
11
|
-
info: "bg-info text-
|
|
12
|
-
success: "bg-success text-
|
|
13
|
-
warning: "bg-warning text-
|
|
14
|
-
destructive: "bg-destructive text-
|
|
11
|
+
info: "bg-info text-info-foreground",
|
|
12
|
+
success: "bg-success text-success-foreground",
|
|
13
|
+
warning: "bg-warning text-warning-foreground",
|
|
14
|
+
destructive: "bg-destructive text-destructive-foreground"
|
|
15
15
|
},
|
|
16
16
|
shape: {
|
|
17
17
|
default: "rounded-md",
|
|
@@ -46,7 +46,7 @@ function N(e) {
|
|
|
46
46
|
...e
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
|
-
var w =
|
|
49
|
+
var w = h.forwardRef(function(t, a) {
|
|
50
50
|
return /* @__PURE__ */ o(M, {
|
|
51
51
|
ref: a,
|
|
52
52
|
"data-slot": "tooltip-trigger",
|
|
@@ -82,7 +82,7 @@ function C({ children: e, className: t }) {
|
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
C.displayName = "Tooltip.Icon";
|
|
85
|
-
function
|
|
85
|
+
function y({ src: e, alt: t, children: a, className: i }) {
|
|
86
86
|
return a ? /* @__PURE__ */ o("span", {
|
|
87
87
|
"data-slot": "tooltip-avatar",
|
|
88
88
|
className: r("shrink-0", i),
|
|
@@ -94,7 +94,7 @@ function h({ src: e, alt: t, children: a, className: i }) {
|
|
|
94
94
|
className: r("size-4 shrink-0 rounded-full object-cover", i)
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
|
-
|
|
97
|
+
y.displayName = "Tooltip.Avatar";
|
|
98
98
|
function v({ children: e, className: t }) {
|
|
99
99
|
return /* @__PURE__ */ o("div", {
|
|
100
100
|
"data-slot": "tooltip-content",
|
|
@@ -138,7 +138,7 @@ function k({ src: e, alt: t, layout: a = "vertical", className: i }) {
|
|
|
138
138
|
k.displayName = "Tooltip.Image";
|
|
139
139
|
function Z({ children: e, content: t, variant: a, icon: i, avatar: l, subtitle: n, badge: p, image: c, imageLayout: d, hasRichContent: u, contentAlt: s }) {
|
|
140
140
|
if (e) return e;
|
|
141
|
-
const
|
|
141
|
+
const g = n && /* @__PURE__ */ o(R, {
|
|
142
142
|
variant: a,
|
|
143
143
|
children: n
|
|
144
144
|
});
|
|
@@ -149,32 +149,32 @@ function Z({ children: e, content: t, variant: a, icon: i, avatar: l, subtitle:
|
|
|
149
149
|
alt: s,
|
|
150
150
|
layout: d,
|
|
151
151
|
className: "delight-tooltip-image"
|
|
152
|
-
}), /* @__PURE__ */ f(v, { children: [/* @__PURE__ */ o(x, { children: t }),
|
|
152
|
+
}), /* @__PURE__ */ f(v, { children: [/* @__PURE__ */ o(x, { children: t }), g] })]
|
|
153
153
|
}) : u ? /* @__PURE__ */ f("div", {
|
|
154
154
|
className: "flex items-center gap-1.5 delight-tooltip-stagger",
|
|
155
155
|
children: [
|
|
156
|
-
l && (typeof l == "string" ? /* @__PURE__ */ o(
|
|
156
|
+
l && (typeof l == "string" ? /* @__PURE__ */ o(y, {
|
|
157
157
|
src: l,
|
|
158
158
|
alt: s
|
|
159
|
-
}) : /* @__PURE__ */ o(
|
|
159
|
+
}) : /* @__PURE__ */ o(y, {
|
|
160
160
|
alt: s,
|
|
161
161
|
children: l
|
|
162
162
|
})),
|
|
163
163
|
i && /* @__PURE__ */ o(C, { children: i }),
|
|
164
|
-
/* @__PURE__ */ f(v, { children: [/* @__PURE__ */ o(x, { children: t }),
|
|
164
|
+
/* @__PURE__ */ f(v, { children: [/* @__PURE__ */ o(x, { children: t }), g] }),
|
|
165
165
|
p && /* @__PURE__ */ o(z, { children: p })
|
|
166
166
|
]
|
|
167
167
|
}) : t;
|
|
168
168
|
}
|
|
169
|
-
var V = ({ trigger: e, content: t, variant: a = "primary", shape: i = "default", position: l = "top", align: n = "center", delayDuration: p, sideOffset: c = 6, icon: d, avatar: u, subtitle: s, badge:
|
|
170
|
-
const [S, _] =
|
|
171
|
-
_((T) => T ===
|
|
169
|
+
var V = ({ trigger: e, content: t, variant: a = "primary", shape: i = "default", position: l = "top", align: n = "center", delayDuration: p, sideOffset: c = 6, icon: d, avatar: u, subtitle: s, badge: g, image: I, imageLayout: B, container: j, children: E }) => {
|
|
170
|
+
const [S, _] = h.useState(null), [D, L] = h.useState(null), O = h.useCallback((m) => {
|
|
171
|
+
_((T) => T === m ? T : m);
|
|
172
172
|
}, []);
|
|
173
|
-
|
|
174
|
-
const
|
|
175
|
-
L((T) => T ===
|
|
173
|
+
h.useEffect(() => {
|
|
174
|
+
const m = S?.ownerDocument.body ?? null;
|
|
175
|
+
L((T) => T === m ? T : m);
|
|
176
176
|
}, [S]);
|
|
177
|
-
const $ = d || u || s ||
|
|
177
|
+
const $ = d || u || s || g || I, q = B ?? "vertical", F = G(t);
|
|
178
178
|
return /* @__PURE__ */ o(b, {
|
|
179
179
|
delay: p,
|
|
180
180
|
children: /* @__PURE__ */ f(N, { children: [/* @__PURE__ */ o(w, {
|
|
@@ -195,7 +195,7 @@ var V = ({ trigger: e, content: t, variant: a = "primary", shape: i = "default",
|
|
|
195
195
|
icon: d,
|
|
196
196
|
avatar: u,
|
|
197
197
|
subtitle: s,
|
|
198
|
-
badge:
|
|
198
|
+
badge: g,
|
|
199
199
|
image: I,
|
|
200
200
|
imageLayout: q,
|
|
201
201
|
hasRichContent: $,
|
|
@@ -216,7 +216,7 @@ var it = Object.assign(V, {
|
|
|
216
216
|
Trigger: w,
|
|
217
217
|
Popup: P,
|
|
218
218
|
Icon: C,
|
|
219
|
-
Avatar:
|
|
219
|
+
Avatar: y,
|
|
220
220
|
Content: v,
|
|
221
221
|
Title: x,
|
|
222
222
|
Subtitle: R,
|