UNPKG

tdesign-react

Version:
122 lines (118 loc) 5.07 kB
/** * tdesign v1.15.1 * (c) 2025 tdesign * @license MIT */ import { _ as _defineProperty } from '../_chunks/dep-cb0a3966.js'; import classNames from 'classnames'; import React, { useMemo, useCallback } from 'react'; import { BacktopIcon } from 'tdesign-icons-react'; import useConfig from '../hooks/useConfig.js'; import { backTopDefaultProps } from './defaultProps.js'; import useScroll from './useScroll.js'; import { scrollTo } from '../_util/scroll.js'; import useDefaultProps from '../hooks/useDefaultProps.js'; import '../_chunks/dep-eca3a3de.js'; import '../config-provider/ConfigContext.js'; import 'lodash-es'; import '../_chunks/dep-f97636ce.js'; import '../_chunks/dep-9dbbf468.js'; import 'dayjs'; import '../_chunks/dep-48805ab8.js'; import '../_chunks/dep-026a4c6b.js'; import 'raf'; import '../_chunks/dep-3a09424a.js'; import '../_util/easing.js'; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var getContainer = function getContainer(container) { if (typeof container === "string") { if (typeof document !== "undefined") { return document.querySelector(container); } } if (typeof container === "function") { return container(); } return null; }; var InternalBackTop = function InternalBackTop(props, ref) { var _useDefaultProps = useDefaultProps(props, backTopDefaultProps), theme = _useDefaultProps.theme, size = _useDefaultProps.size, shape = _useDefaultProps.shape, target = _useDefaultProps.target, visibleHeight = _useDefaultProps.visibleHeight, container = _useDefaultProps.container, duration = _useDefaultProps.duration, content = _useDefaultProps.content, offset = _useDefaultProps.offset, children = _useDefaultProps.children, cusContent = _useDefaultProps["default"], className = _useDefaultProps.className, style = _useDefaultProps.style, onClick = _useDefaultProps.onClick; var _useConfig = useConfig(), classPrefix = _useConfig.classPrefix; var scrollContainer = useMemo(function () { return getContainer(container); }, [container]); var _useScroll = useScroll({ target: scrollContainer }), scrollTop = _useScroll.scrollTop; var defaultContent = /* @__PURE__ */React.createElement(React.Fragment, null, /* @__PURE__ */React.createElement(BacktopIcon, { className: "".concat(classPrefix, "-back-top__icon"), size: 24 }), /* @__PURE__ */React.createElement("span", { className: "".concat(classPrefix, "-back-top__text") }, "TOP")); var renderChildren = children || content || cusContent || defaultContent; var backTopRef = React.useRef(null); React.useImperativeHandle(ref, function () { return backTopRef.current; }); var visible = useMemo(function () { if (typeof visibleHeight === "string") { return scrollTop >= Number(visibleHeight.replace("px", "")); } return scrollTop >= visibleHeight; }, [scrollTop, visibleHeight]); var backTopStyle = useMemo(function () { return _objectSpread({ insetInlineEnd: offset[0], insetBlockEnd: offset[1] }, style); }, [offset, style]); var cls = classNames("".concat(classPrefix, "-back-top"), "".concat(classPrefix, "-back-top--theme-").concat(theme), "".concat(classPrefix, "-back-top--").concat(shape), _defineProperty(_defineProperty(_defineProperty({}, "".concat(classPrefix, "-back-top--show"), visible), "".concat(classPrefix, "-size-s"), size === "small"), "".concat(classPrefix, "-size-m"), size === "medium"), className); var getBackTo = useCallback(function () { if (!target) return 0; var targetNode = getContainer(target); if (!targetNode) return 0; var rect = targetNode.getBoundingClientRect(); var y = rect.y; return y; }, [target]); var handleClick = useCallback(function (e) { e.stopPropagation(); onClick === null || onClick === void 0 || onClick({ e: e }); var backTo = getBackTo(); scrollTo(backTo, { container: scrollContainer, duration: duration }); }, [duration, getBackTo, onClick, scrollContainer]); return /* @__PURE__ */React.createElement("button", { type: "button", ref: backTopRef, className: cls, style: backTopStyle, onClick: handleClick }, renderChildren); }; var BackTop = /*#__PURE__*/React.forwardRef(InternalBackTop); BackTop.displayName = "BackTop"; export { BackTop as default }; //# sourceMappingURL=BackTop.js.map