UNPKG

tdesign-react

Version:
95 lines (91 loc) 3.73 kB
/** * 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