@react-spectrum/s2
Version:
Spectrum 2 UI components in React
658 lines (641 loc) • 28.5 kB
JavaScript
import "./Tabs.css";
import {centerBaseline as $1f4b04be3f24aae3$export$9d7e2342a7e53afa} from "./CenterBaseline.mjs";
import {IconContext as $ac8c32e6775ddd1f$export$a49f528ae1a4d0ed} from "../icons/Icon.mjs";
import {Picker as $0067ea932a992b6a$export$ba25329847403e11, PickerItem as $0067ea932a992b6a$export$d601881f38163e28} from "./TabsPicker.mjs";
import {Text as $8e847109a6ab556d$export$5f1af8db9871e1d6, TextContext as $8e847109a6ab556d$export$9afb8bc826b033ea} from "./Content.mjs";
import {useSpectrumContextProps as $5ce63c423902f47d$export$764f6146fadd77f7} from "../icons/useSpectrumContextProps.mjs";
import {jsx as $8bRfI$jsx, jsxs as $8bRfI$jsxs, Fragment as $8bRfI$Fragment} from "react/jsx-runtime";
import {createContext as $8bRfI$createContext, forwardRef as $8bRfI$forwardRef, useContext as $8bRfI$useContext, useState as $8bRfI$useState, useRef as $8bRfI$useRef, useEffect as $8bRfI$useEffect, useCallback as $8bRfI$useCallback, useMemo as $8bRfI$useMemo, createElement as $8bRfI$createElement} from "react";
import {Provider as $8bRfI$Provider, TabListStateContext as $8bRfI$TabListStateContext, TabList as $8bRfI$TabList, Tab as $8bRfI$Tab, TabPanel as $8bRfI$TabPanel, Group as $8bRfI$Group, Tabs as $8bRfI$Tabs} from "react-aria-components";
import {CollectionBuilder as $8bRfI$CollectionBuilder} from "@react-aria/collections";
import {useLayoutEffect as $8bRfI$useLayoutEffect, useId as $8bRfI$useId, inertValue as $8bRfI$inertValue, useLabels as $8bRfI$useLabels, useEffectEvent as $8bRfI$useEffectEvent, useResizeObserver as $8bRfI$useResizeObserver} from "@react-aria/utils";
import {useControlledState as $8bRfI$useControlledState} from "@react-stately/utils";
import {useDOMRef as $8bRfI$useDOMRef} from "@react-spectrum/utils";
import {useHasTabbableChild as $8bRfI$useHasTabbableChild} from "@react-aria/focus";
import {useLocale as $8bRfI$useLocale} from "@react-aria/i18n";
/*
* Copyright 2024 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
const $79e2b4a1b34d1592$export$cfa7aa87c26e7d1f = /*#__PURE__*/ (0, $8bRfI$createContext)(null);
const $79e2b4a1b34d1592$var$InternalTabsContext = /*#__PURE__*/ (0, $8bRfI$createContext)({});
const $79e2b4a1b34d1592$var$CollapseContext = /*#__PURE__*/ (0, $8bRfI$createContext)({
showTabs: true,
menuId: '',
valueId: ''
});
const $79e2b4a1b34d1592$var$tabs = function anonymous(props, overrides) {
let rules = " ";
let position = false;
let flexShrink = false;
let matches = (overrides || '').matchAll(/(?:^|\s)(J|G|I|H|_u|_v|_s|__A|_d|_J|z|y|B|A|_P|_9|W|_l|_A|_z|Z|N|L|F|M|K)[^\s]+/g);
for (let p of matches){
if (p[1] === "_P") position = true;
if (p[1] === "_v") flexShrink = true;
rules += p[0];
}
if (!position) rules += ' _Pc91';
rules += ' sd91';
if (!flexShrink) rules += ' _va91';
rules += ' ug91';
rules += ' uch91';
rules += ' udi91';
rules += ' uea91';
rules += ' ugb91';
rules += ' uhd91';
rules += ' uje91';
rules += ' uic91';
rules += ' vd91';
rules += ' vsf91';
rules += ' wb91';
rules += ' xb91';
rules += ' _xa91';
rules += ' _Fa91';
rules += ' _Ffb91';
rules += ' pt91';
if (props.orientation === "horizontal") rules += ' _ta91';
return rules;
};
const $79e2b4a1b34d1592$export$b2539bed5023c21c = /*#__PURE__*/ (0, $8bRfI$forwardRef)(function Tabs(props, ref) {
[props, ref] = (0, $5ce63c423902f47d$export$764f6146fadd77f7)(props, ref, $79e2b4a1b34d1592$export$cfa7aa87c26e7d1f);
let { density: density = 'regular', isDisabled: isDisabled, disabledKeys: disabledKeys, orientation: orientation = 'horizontal', labelBehavior: labelBehavior = 'show' } = props;
let domRef = (0, $8bRfI$useDOMRef)(ref);
let [value, setValue] = (0, $8bRfI$useControlledState)(props.selectedKey, props.defaultSelectedKey ?? null, props.onSelectionChange);
if (!props['aria-label'] && !props['aria-labelledby']) throw new Error('An aria-label or aria-labelledby prop is required on Tabs for accessibility.');
return /*#__PURE__*/ (0, $8bRfI$jsx)((0, $8bRfI$Provider), {
values: [
[
$79e2b4a1b34d1592$var$InternalTabsContext,
{
density: density,
isDisabled: isDisabled,
orientation: orientation,
disabledKeys: disabledKeys,
selectedKey: value,
onSelectionChange: setValue,
labelBehavior: labelBehavior,
'aria-label': props['aria-label'],
'aria-labelledby': props['aria-labelledby']
}
]
],
children: /*#__PURE__*/ (0, $8bRfI$jsx)((0, $8bRfI$CollectionBuilder), {
content: props.children,
children: (collection)=>/*#__PURE__*/ (0, $8bRfI$jsx)($79e2b4a1b34d1592$var$CollapsingTabs, {
...props,
selectedKey: value,
onSelectionChange: setValue,
collection: collection,
containerRef: domRef
})
})
});
});
const $79e2b4a1b34d1592$var$tablist = function anonymous(props) {
let rules = " ";
rules += ' sd91';
if (props.orientation === "horizontal") {
if (props.labelBehavior === "hide") {
if (props.density === "regular") rules += ' Uj91';
else if (props.density === "compact") rules += ' Ul91';
} else if (props.density === "regular") rules += ' Up91';
else if (props.density === "compact") rules += ' Uj91';
}
if (props.orientation === "horizontal") {
if (props.labelBehavior === "hide") {
if (props.density === "regular") rules += ' qj91';
else if (props.density === "compact") rules += ' ql91';
} else if (props.density === "regular") rules += ' qp91';
else if (props.density === "compact") rules += ' qj91';
}
if (props.orientation === "vertical") rules += ' _ta91';
if (props.orientation === "vertical") rules += ' Hz91';
if (props.orientation === "vertical") rules += ' Ix91';
rules += ' _va91';
rules += ' _sa91';
return rules;
};
function $79e2b4a1b34d1592$export$e51a686c67fdaa2d(props) {
let { showTabs: showTabs } = (0, $8bRfI$useContext)($79e2b4a1b34d1592$var$CollapseContext) ?? {};
if (showTabs) return /*#__PURE__*/ (0, $8bRfI$jsx)($79e2b4a1b34d1592$var$TabListInner, {
...props
});
return null;
}
function $79e2b4a1b34d1592$var$TabListInner(props1) {
let { density: density, isDisabled: isDisabled, disabledKeys: disabledKeys, orientation: orientation, labelBehavior: labelBehavior, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy } = (0, $8bRfI$useContext)($79e2b4a1b34d1592$var$InternalTabsContext) ?? {};
let state = (0, $8bRfI$useContext)((0, $8bRfI$TabListStateContext));
let [selectedTab, setSelectedTab] = (0, $8bRfI$useState)(undefined);
let tablistRef = (0, $8bRfI$useRef)(null);
(0, $8bRfI$useLayoutEffect)(()=>{
if (tablistRef?.current) {
let tab = tablistRef.current.querySelector('[role=tab][data-selected=true]');
if (tab != null) setSelectedTab(tab);
}
}, [
tablistRef,
state?.selectedItem?.key
]);
return /*#__PURE__*/ (0, $8bRfI$jsxs)("div", {
style: props1.UNSAFE_style,
className: (props1.UNSAFE_className || '') + function anonymous(props, overrides) {
let rules = " ";
let position = false;
let matches = (overrides || '').matchAll(/(?:^|\s)(J|G|I|H|_u|_v|_s|__A|_d|_J|z|y|B|A|_P|_9|W|_l|_A|_z|Z|N|L)[^\s]+/g);
for (let p of matches){
if (p[1] === "_P") position = true;
rules += p[0];
}
if (!position) rules += ' _Pc91';
return rules;
}(null, props1.styles),
children: [
orientation === 'vertical' && /*#__PURE__*/ (0, $8bRfI$jsx)($79e2b4a1b34d1592$var$TabLine, {
disabledKeys: disabledKeys,
isDisabled: isDisabled,
selectedTab: selectedTab,
orientation: orientation,
tabList: props1,
density: density
}),
/*#__PURE__*/ (0, $8bRfI$jsx)((0, $8bRfI$TabList), {
...props1,
"aria-label": ariaLabel,
"aria-labelledby": ariaLabelledBy,
ref: tablistRef,
className: (renderProps)=>$79e2b4a1b34d1592$var$tablist({
...renderProps,
labelBehavior: labelBehavior,
density: density
})
}),
orientation === 'horizontal' && /*#__PURE__*/ (0, $8bRfI$jsx)($79e2b4a1b34d1592$var$TabLine, {
disabledKeys: disabledKeys,
isDisabled: isDisabled,
selectedTab: selectedTab,
orientation: orientation,
tabList: props1,
density: density
})
]
});
}
const $79e2b4a1b34d1592$var$selectedIndicator = function anonymous(props) {
let rules = " ";
rules += ' _Pa91';
if (props.isDisabled) rules += ' gH91';
else rules += ' g091';
if (props.isDisabled) rules += ' gld91';
else rules += ' gle91';
if (props.orientation === "horizontal") rules += ' FLvNfn91';
if (props.orientation === "vertical") rules += ' ZLvNfn91';
if (props.orientation === "horizontal") rules += ' _lr91';
rules += ' _je91';
rules += ' og91';
rules += ' ng91';
rules += ' kg91';
rules += ' jg91';
rules += ' Xa91';
rules += ' _2b91';
return rules;
};
function $79e2b4a1b34d1592$var$TabLine(props) {
let { disabledKeys: disabledKeys, isDisabled: isTabsDisabled, selectedTab: selectedTab, orientation: orientation, tabList: tabList, density: density } = props;
let { direction: direction } = (0, $8bRfI$useLocale)();
let state = (0, $8bRfI$useContext)((0, $8bRfI$TabListStateContext));
// We want to add disabled styling to the selection indicator only if all the Tabs are disabled
let [isDisabled, setIsDisabled] = (0, $8bRfI$useState)(false);
(0, $8bRfI$useEffect)(()=>{
let isDisabled = isTabsDisabled || $79e2b4a1b34d1592$var$isAllTabsDisabled(state?.collection, disabledKeys ? new Set(disabledKeys) : new Set(null));
setIsDisabled(isDisabled);
}, [
state?.collection,
disabledKeys,
isTabsDisabled,
setIsDisabled
]);
let [style, setStyle] = (0, $8bRfI$useState)({
transform: undefined,
width: undefined,
height: undefined
});
let onResize = (0, $8bRfI$useCallback)(()=>{
if (selectedTab) {
let styleObj = {
transform: undefined,
width: undefined,
height: undefined
};
// In RTL, calculate the transform from the right edge of the tablist so that resizing the window doesn't break the Tabline position due to offsetLeft changes
let offset = direction === 'rtl' ? -1 * (selectedTab.offsetParent?.offsetWidth - selectedTab.offsetWidth - selectedTab.offsetLeft) : selectedTab.offsetLeft;
styleObj.transform = orientation === 'vertical' ? `translateY(${selectedTab.offsetTop}px)` : `translateX(${offset}px)`;
if (orientation === 'horizontal') styleObj.width = `${selectedTab.offsetWidth}px`;
else styleObj.height = `${selectedTab.offsetHeight}px`;
setStyle(styleObj);
}
}, [
direction,
setStyle,
selectedTab,
orientation
]);
(0, $8bRfI$useLayoutEffect)(()=>{
onResize();
}, [
onResize,
state?.selectedItem?.key,
density,
direction,
orientation,
tabList
]);
return /*#__PURE__*/ (0, $8bRfI$jsx)("div", {
style: {
...style
},
className: $79e2b4a1b34d1592$var$selectedIndicator({
isDisabled: isDisabled,
orientation: orientation
})
});
}
const $79e2b4a1b34d1592$var$tab = function anonymous(props, overrides) {
let rules = " ";
let position = false;
let flexShrink = false;
let matches = (overrides || '').matchAll(/(?:^|\s)(J|G|I|H|_u|_v|_s|__A|_d|_J|z|y|B|A|_P|_9|W|_l|_A|_z|Z|N|L)[^\s]+/g);
for (let p of matches){
if (p[1] === "_P") position = true;
if (p[1] === "_v") flexShrink = true;
rules += p[0];
}
if (props.isFocusVisible) rules += ' _Lf91';
else rules += ' _Le91';
rules += ' Oh91';
rules += ' _Mc91';
rules += ' _Kd91';
rules += ' sd91';
if (props.isDisabled) rules += ' pp91';
else if (props.isSelected) {
if (props.isPressed) rules += ' po91';
else if (props.isFocusVisible) rules += ' po91';
else if (props.isHovered) rules += ' po91';
else rules += ' pt91';
} else {
if (props.isPressed) rules += ' pt91';
else if (props.isFocusVisible) rules += ' pt91';
else if (props.isHovered) rules += ' pt91';
else rules += ' pv91';
}
if (props.isDisabled) rules += ' plc91';
else if (props.isSelected) rules += ' pld91';
rules += ' oa91';
rules += ' na91';
rules += ' ka91';
rules += ' ja91';
rules += ' Uc91';
rules += ' Usd91';
rules += ' qc91';
rules += ' qsd91';
if (props.density === "regular") rules += ' Fz91';
else if (props.density === "compact") rules += ' Fx91';
rules += ' eb91';
if (!position) rules += ' _Pc91';
rules += ' ri91';
if (!flexShrink) rules += ' _va91';
rules += ' Yd91';
rules += ' Xb91';
rules += ' _2b91';
if (props.labelBehavior === "hide") rules += ' SssxDec91';
if (props.labelBehavior === "hide") rules += ' RssxDec91';
rules += ' __ca91';
return rules;
};
const $79e2b4a1b34d1592$var$icon = " sb91 _va91 -_8sjo0b-t5ZbAob91";
function $79e2b4a1b34d1592$export$3e41faf802a29e71(props1) {
let { density: density, labelBehavior: labelBehavior } = (0, $8bRfI$useContext)($79e2b4a1b34d1592$var$InternalTabsContext) ?? {};
let contentId = (0, $8bRfI$useId)();
let ariaLabelledBy = props1['aria-labelledby'] || '';
return /*#__PURE__*/ (0, $8bRfI$jsx)((0, $8bRfI$Tab), {
...props1,
// @ts-ignore
originalProps: props1,
"aria-labelledby": `${labelBehavior === 'hide' ? contentId : ''} ${ariaLabelledBy}`,
style: props1.UNSAFE_style,
className: (renderProps)=>(props1.UNSAFE_className || '') + $79e2b4a1b34d1592$var$tab({
...renderProps,
density: density,
labelBehavior: labelBehavior
}, props1.styles),
children: ({ isMenu: // @ts-ignore
isMenu })=>{
if (isMenu) return props1.children;
else return /*#__PURE__*/ (0, $8bRfI$jsx)((0, $8bRfI$Provider), {
values: [
[
(0, $8e847109a6ab556d$export$9afb8bc826b033ea),
{
id: contentId,
styles: function anonymous(props) {
let rules = " ";
rules += ' _Jb91';
if (props.labelBehavior === "hide") rules += ' sk91';
return rules;
}({
labelBehavior: labelBehavior
})
}
],
[
(0, $ac8c32e6775ddd1f$export$a49f528ae1a4d0ed),
{
render: (0, $1f4b04be3f24aae3$export$9d7e2342a7e53afa)({
slot: 'icon',
styles: " _Ja91"
}),
styles: $79e2b4a1b34d1592$var$icon
}
]
],
children: typeof props1.children === 'string' ? /*#__PURE__*/ (0, $8bRfI$jsx)((0, $8e847109a6ab556d$export$5f1af8db9871e1d6), {
children: props1.children
}) : props1.children
});
}
});
}
const $79e2b4a1b34d1592$var$tabPanel = function anonymous(props, overrides) {
let rules = " ";
let marginTop = false;
let flexGrow = false;
let flexBasis = false;
let minHeight = false;
let minWidth = false;
let matches = (overrides || '').matchAll(/(?:^|\s)(J|G|I|H|_u|_v|_s|__A|_d|_J|z|y|B|A|_P|_9|W|_l|_A|_z|Z|N|L|F|M|K)[^\s]+/g);
for (let p of matches){
if (p[1] === "J") marginTop = true;
if (p[1] === "_u") flexGrow = true;
if (p[1] === "_s") flexBasis = true;
if (p[1] === "M") minHeight = true;
if (p[1] === "N") minWidth = true;
rules += p[0];
}
if (props.isFocusVisible) rules += ' _Lf91';
else rules += ' _Le91';
rules += ' Oh91';
rules += ' _Mc91';
rules += ' _Kd91';
if (!marginTop) rules += ' Js91';
rules += ' pt91';
if (!flexGrow) rules += ' _ub91';
if (!flexBasis) rules += ' _sa91';
if (!minHeight) rules += ' Ma91';
if (!minWidth) rules += ' Na91';
return rules;
};
function $79e2b4a1b34d1592$export$3d96ec278d3efce4(props) {
let { showTabs: showTabs } = (0, $8bRfI$useContext)($79e2b4a1b34d1592$var$CollapseContext);
let { selectedKey: selectedKey } = (0, $8bRfI$useContext)($79e2b4a1b34d1592$var$InternalTabsContext);
if (showTabs) return /*#__PURE__*/ (0, $8bRfI$jsx)((0, $8bRfI$TabPanel), {
...props,
style: props.UNSAFE_style,
className: (renderProps)=>(props.UNSAFE_className ?? '') + $79e2b4a1b34d1592$var$tabPanel(renderProps, props.styles)
});
if (props.id !== selectedKey) return null;
return /*#__PURE__*/ (0, $8bRfI$jsx)($79e2b4a1b34d1592$var$CollapsedTabPanel, {
...props
});
}
function $79e2b4a1b34d1592$var$CollapsedTabPanel(props) {
let { UNSAFE_style: UNSAFE_style, UNSAFE_className: UNSAFE_className = '', ...otherProps } = props;
let { menuId: menuId, valueId: valueId } = (0, $8bRfI$useContext)($79e2b4a1b34d1592$var$CollapseContext);
let ref = (0, $8bRfI$useRef)(null);
let tabIndex = (0, $8bRfI$useHasTabbableChild)(ref) ? undefined : 0;
return /*#__PURE__*/ (0, $8bRfI$jsx)((0, $8bRfI$Group), {
...otherProps,
ref: ref,
"aria-labelledby": menuId + ' ' + valueId,
tabIndex: tabIndex,
style: UNSAFE_style,
className: (renderProps)=>UNSAFE_className + $79e2b4a1b34d1592$var$tabPanel(renderProps, props.styles)
});
}
function $79e2b4a1b34d1592$var$isAllTabsDisabled(collection, disabledKeys) {
let testKey = null;
if (collection && collection.size > 0) {
testKey = collection.getFirstKey();
let index = 0;
while(testKey && index < collection.size){
// We have to check if the item in the collection has a key in disabledKeys or has the isDisabled prop set directly on it
if (!disabledKeys.has(testKey) && !collection.getItem(testKey)?.props?.isDisabled) return false;
testKey = collection.getKeyAfter(testKey);
index++;
}
return true;
}
return false;
}
let $79e2b4a1b34d1592$var$HiddenTabs = function(props) {
let { listRef: listRef, items: items, size: size, density: density } = props;
return /*#__PURE__*/ (0, $8bRfI$jsx)("div", {
// @ts-ignore
inert: (0, $8bRfI$inertValue)(true),
ref: listRef,
className: " s40ub4c91 _t40ub4c91 U40ub4c91 q40ub4c91 _w40ub4c91 _Pa91 Wr91 _lr91 _Ar91 _zr91 _6b91 _Nc91 Pc91 _Ia91",
children: items.map((item)=>{
// pull off individual props as an allow list, don't want refs or other props getting through
return /*#__PURE__*/ (0, $8bRfI$jsx)("div", {
"data-hidden-tab": true,
style: item.props.UNSAFE_style,
className: item.props.className({
size: size,
density: density
}),
children: item.props.children({
size: size,
density: density
})
}, item.key);
})
});
};
let $79e2b4a1b34d1592$var$TabsMenu = (props1)=>{
let { id: id, items: items, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, valueId: valueId } = props1;
let { density: density, onSelectionChange: _onSelectionChange, selectedKey: selectedKey, isDisabled: isDisabled, disabledKeys: disabledKeys, labelBehavior: labelBehavior } = (0, $8bRfI$useContext)($79e2b4a1b34d1592$var$InternalTabsContext);
let onSelectionChange = (0, $8bRfI$useCallback)((key)=>{
if (key != null) _onSelectionChange?.(key);
}, [
_onSelectionChange
]);
let state = (0, $8bRfI$useContext)((0, $8bRfI$TabListStateContext));
let allKeysDisabled = (0, $8bRfI$useMemo)(()=>{
return $79e2b4a1b34d1592$var$isAllTabsDisabled(state?.collection, disabledKeys ? new Set(disabledKeys) : new Set());
}, [
state?.collection,
disabledKeys
]);
let labelProps = (0, $8bRfI$useLabels)({
id: id,
'aria-label': ariaLabel,
'aria-labelledby': ariaLabelledBy
});
return /*#__PURE__*/ (0, $8bRfI$jsx)("div", {
className: function anonymous(props) {
let rules = " ";
rules += ' sd91';
rules += ' _va91';
rules += ' eb91';
if (props.density === "regular") rules += ' Fz91';
else if (props.density === "compact") rules += ' Fx91';
return rules;
}({
density: density
}),
children: /*#__PURE__*/ (0, $8bRfI$jsx)((0, $0067ea932a992b6a$export$ba25329847403e11), {
id: id,
valueId: valueId,
...labelProps,
"aria-describedby": props1['aria-describedby'],
"aria-details": props1['aria-details'],
isDisabled: isDisabled || allKeysDisabled,
density: density,
labelBehavior: labelBehavior,
items: items,
disabledKeys: disabledKeys,
selectedKey: selectedKey,
onSelectionChange: onSelectionChange,
children: (item)=>{
return /*#__PURE__*/ (0, $8bRfI$createElement)((0, $0067ea932a992b6a$export$d601881f38163e28), {
...item.props.originalProps,
isDisabled: isDisabled || allKeysDisabled,
key: item.key
}, item.props.children({
density: density,
isMenu: true
}));
}
})
});
};
let $79e2b4a1b34d1592$var$CollapsingTabs = ({ collection: collection, containerRef: containerRef, ...props })=>{
let { density: density = 'regular', orientation: orientation = 'horizontal', labelBehavior: labelBehavior = 'show', onSelectionChange: onSelectionChange } = props;
let [showItems, _setShowItems] = (0, $8bRfI$useState)(true);
showItems = orientation === 'vertical' ? true : showItems;
let setShowItems = (0, $8bRfI$useCallback)((value)=>{
if (orientation === 'vertical') // if orientation is vertical, we always show the items
_setShowItems(true);
else _setShowItems(value);
}, [
orientation
]);
let { direction: direction } = (0, $8bRfI$useLocale)();
let children = (0, $8bRfI$useMemo)(()=>[
...collection
], [
collection
]);
let listRef = (0, $8bRfI$useRef)(null);
let updateOverflow = (0, $8bRfI$useEffectEvent)(()=>{
if (orientation === 'vertical' || !listRef.current || !containerRef?.current) return;
let container = listRef.current;
let containerRect = container.getBoundingClientRect();
let tabs = container.querySelectorAll('[data-hidden-tab]');
let lastTab = tabs[tabs.length - 1];
let lastTabRect = lastTab.getBoundingClientRect();
if (direction === 'ltr') setShowItems?.(lastTabRect.right <= containerRect.right);
else setShowItems?.(lastTabRect.left >= containerRect.left);
});
(0, $8bRfI$useResizeObserver)({
ref: containerRef,
onResize: updateOverflow
});
(0, $8bRfI$useLayoutEffect)(()=>{
if (collection.size > 0) queueMicrotask(updateOverflow);
}, [
collection.size,
updateOverflow
]);
// start with null so that the first render won't have a flicker
let prevOrientation = (0, $8bRfI$useRef)(null);
(0, $8bRfI$useLayoutEffect)(()=>{
if (collection.size > 0 && prevOrientation.current !== orientation) updateOverflow();
prevOrientation.current = orientation;
}, [
collection.size,
updateOverflow,
orientation
]);
(0, $8bRfI$useEffect)(()=>{
// Recalculate visible tags when fonts are loaded.
document.fonts?.ready.then(()=>updateOverflow());
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
let menuId = (0, $8bRfI$useId)();
let valueId = (0, $8bRfI$useId)();
let contents;
if (showItems) contents = /*#__PURE__*/ (0, $8bRfI$jsx)((0, $8bRfI$Tabs), {
...props,
style: {
display: 'contents'
},
children: props.children
});
else contents = /*#__PURE__*/ (0, $8bRfI$jsxs)((0, $8bRfI$Fragment), {
children: [
/*#__PURE__*/ (0, $8bRfI$jsx)($79e2b4a1b34d1592$var$TabsMenu, {
id: menuId,
valueId: valueId,
items: children,
onSelectionChange: onSelectionChange,
"aria-label": props['aria-label'],
"aria-describedby": props['aria-labelledby']
}),
/*#__PURE__*/ (0, $8bRfI$jsx)($79e2b4a1b34d1592$var$CollapseContext.Provider, {
value: {
showTabs: false,
menuId: menuId,
valueId: valueId
},
children: props.children
})
]
});
return /*#__PURE__*/ (0, $8bRfI$jsxs)("div", {
style: props.UNSAFE_style,
className: (props.UNSAFE_className || '') + $79e2b4a1b34d1592$var$tabs({
orientation: orientation
}, props.styles),
ref: containerRef,
children: [
/*#__PURE__*/ (0, $8bRfI$jsx)("div", {
className: $79e2b4a1b34d1592$var$tablist({
orientation: orientation,
labelBehavior: labelBehavior,
density: density
}),
children: /*#__PURE__*/ (0, $8bRfI$jsx)($79e2b4a1b34d1592$var$HiddenTabs, {
items: children,
density: density,
listRef: listRef
})
}),
/*#__PURE__*/ (0, $8bRfI$jsx)($79e2b4a1b34d1592$var$CollapseContext.Provider, {
value: {
showTabs: true,
menuId: menuId,
valueId: valueId
},
children: contents
})
]
});
};
export {$79e2b4a1b34d1592$export$cfa7aa87c26e7d1f as TabsContext, $79e2b4a1b34d1592$export$b2539bed5023c21c as Tabs, $79e2b4a1b34d1592$export$e51a686c67fdaa2d as TabList, $79e2b4a1b34d1592$export$3e41faf802a29e71 as Tab, $79e2b4a1b34d1592$export$3d96ec278d3efce4 as TabPanel};
//# sourceMappingURL=Tabs.mjs.map