tdesign-react
Version:
TDesign Component for React
95 lines (91 loc) • 3.73 kB
JavaScript
/**
* tdesign v1.15.1
* (c) 2025 tdesign
* @license MIT
*/
import { _ as _defineProperty } from '../_chunks/dep-cb0a3966.js';
import { _ as _slicedToArray } from '../_chunks/dep-48805ab8.js';
import React, { useState, useRef, useEffect } from 'react';
import classNames from 'classnames';
import useConfig from '../hooks/useConfig.js';
import useMutationObservable from '../hooks/useMutationObserver.js';
import useResizeObserver from '../hooks/useResizeObserver.js';
import '../_chunks/dep-eca3a3de.js';
import '../_chunks/dep-026a4c6b.js';
import '../config-provider/ConfigContext.js';
import 'lodash-es';
import '../_chunks/dep-f97636ce.js';
import '../_chunks/dep-9dbbf468.js';
import 'dayjs';
import '../hooks/useLatest.js';
import '../hooks/useLayoutEffect.js';
import '../_chunks/dep-3a09424a.js';
var TabBar = function TabBar(props) {
var tabPosition = props.tabPosition,
activeId = props.activeId,
containerRef = props.containerRef,
navsWrapRef = props.navsWrapRef;
var _useConfig = useConfig(),
classPrefix = _useConfig.classPrefix;
var _useState = useState({}),
_useState2 = _slicedToArray(_useState, 2),
barStyle = _useState2[0],
setBarStyle = _useState2[1];
var tabsClassPrefix = "".concat(classPrefix, "-tabs");
var currentActiveIdRef = useRef(activeId);
useEffect(function () {
currentActiveIdRef.current = activeId;
}, [activeId]);
var computeStyle = React.useCallback(function () {
var isHorizontal = ["bottom", "top"].includes(tabPosition);
var transformPosition = isHorizontal ? "translateX" : "translateY";
var itemProp = isHorizontal ? "width" : "height";
var barBorderProp = isHorizontal ? "width" : "height";
var offset = 0;
if (containerRef.current) {
var _containerRef$current;
var itemsRef = (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.querySelectorAll(".".concat(tabsClassPrefix, "__nav-item"));
if (itemsRef.length - 1 >= currentActiveIdRef.current) {
itemsRef.forEach(function (item, itemIndex) {
if (itemIndex < currentActiveIdRef.current) {
offset += Number(getComputedStyle(item)[itemProp].replace("px", ""));
}
});
var computedItem = itemsRef[currentActiveIdRef.current];
if (!computedItem) {
setBarStyle(_defineProperty({
transform: "".concat(transformPosition, "(", 0, "px)")
}, barBorderProp, 0));
return;
}
var itemPropValue = getComputedStyle(computedItem)[itemProp];
setBarStyle(_defineProperty({
transform: "".concat(transformPosition, "(").concat(offset, "px)")
}, barBorderProp, itemPropValue || 0));
}
}
}, [currentActiveIdRef, containerRef, tabPosition, tabsClassPrefix]);
useEffect(function () {
if (containerRef.current) {
setTimeout(function () {
return computeStyle();
});
}
}, [tabPosition, activeId, containerRef.current]);
var handleMutationObserver = React.useCallback(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.type === "characterData") {
computeStyle();
}
});
}, [computeStyle]);
useMutationObservable(containerRef.current, handleMutationObserver);
useResizeObserver(navsWrapRef, computeStyle);
return /* @__PURE__ */React.createElement("div", {
className: classNames(_defineProperty(_defineProperty({}, "".concat(tabsClassPrefix, "__bar"), true), "".concat(classPrefix, "-is-").concat(tabPosition), true)),
style: barStyle
});
};
TabBar.displayName = "TabBar";
export { TabBar as default };
//# sourceMappingURL=TabBar.js.map