/**
 * ldesign v0.4.2
 * (c) 2023 ldesign
 * @license MIT
 */

import _defineProperty from '@babel/runtime/helpers/defineProperty';
import _typeof from '@babel/runtime/helpers/typeof';
import { defineComponent, ref, onMounted, computed, createVNode, Fragment, createTextVNode } from 'vue';
import { BacktopIcon } from '@ldesign/icons-vue-next';
import { scrollTo } from '../utils/dom.js';
import { useGlobalIcon } from '../hooks/useGlobalIcon.js';
import props from './props.js';
import { useConfig } from '../config-provider/useConfig.js';
import { usePrefixClass } from '../hooks/useConfig.js';
import { useChildSlots } from '../hooks/slot.js';
import { useContent } from '../hooks/tnode.js';
import '../_chunks/dep-c9c789a8.js';
import 'lodash/isString';
import 'lodash/isFunction';
import 'lodash/isArray';
import '../utils/easing.js';
import 'lodash/cloneDeep';
import '../config-provider/context.js';
import 'lodash/mergeWith';
import 'lodash/merge';
import '../_common/js/global-config/default-config.js';
import '../_common/js/global-config/locale/zh_CN.js';
import 'dayjs';
import 'lodash/camelCase';
import 'lodash/kebabCase';
import '../utils/render-tnode.js';
import 'lodash/isEmpty';
import 'lodash/isObject';

var _BackTop = defineComponent({
  name: "TBackTop",
  props: props,
  setup: function setup(props2) {
    var visible = ref(false);
    var containerRef = ref(null);
    var componentName = usePrefixClass("back-top");
    var _useConfig = useConfig("alert"),
      classPrefix = _useConfig.classPrefix;
    var _useGlobalIcon = useGlobalIcon({
        BacktopIcon: BacktopIcon
      }),
      BacktopIcon$1 = _useGlobalIcon.BacktopIcon;
    var renderContent = useContent();
    var getContainer = function getContainer(container) {
      if (typeof container === "string" && (typeof document === "undefined" ? "undefined" : _typeof(document)) !== void 0) {
        if (container === "body") return document;
        return document.querySelector(container);
      }
      if (typeof container === "function") return container();
      return null;
    };
    onMounted(function () {
      containerRef.value = getContainer(props2.container);
      var visibleHeight;
      if (typeof props2.visibleHeight === "string") visibleHeight = Number(props2.visibleHeight.replace("px", ""));else visibleHeight = props2.visibleHeight;
      if (visibleHeight === 0) {
        visible.value = true;
        return;
      }
      var scrollDOM;
      if (containerRef.value.scrollTop === void 0) scrollDOM = document.documentElement;else scrollDOM = containerRef.value;
      containerRef.value.onscroll = function () {
        var scrollTop = scrollDOM.scrollTop;
        if (scrollTop >= visibleHeight) {
          visible.value = true;
          containerRef.value.onscroll = null;
        }
      };
    });
    return function () {
      var theme = props2.theme,
        shape = props2.shape,
        size = props2.size,
        target = props2.target,
        duration = props2.duration,
        offset = props2.offset,
        container = props2.container;
      var getChild = useChildSlots();
      var children = getChild();
      if (children.length < 1) children = null;
      var cls = computed(function () {
        var _ref;
        return _ref = {}, _defineProperty(_ref, componentName.value, true), _defineProperty(_ref, "".concat(componentName.value, "--theme-").concat(theme), true), _defineProperty(_ref, "".concat(componentName.value, "--").concat(shape), true), _defineProperty(_ref, "".concat(componentName.value, "--show"), visible.value), _defineProperty(_ref, "".concat(classPrefix.value, "-size-s"), size === "small"), _defineProperty(_ref, "".concat(classPrefix.value, "-size-m"), size === "medium"), _ref;
      });
      var defaultContent = createVNode(Fragment, null, [createVNode(BacktopIcon$1, {
        "class": "".concat(componentName.value, "__icon"),
        "size": "24"
      }, null), createVNode("span", {
        "class": "".concat(componentName.value, "__text")
      }, [createTextVNode("TOP")])]);
      var getBackTo = function getBackTo() {
        if (target === container) return 0;
        if (target === "body") return 0;
        if (!target) return 0;
        var targetNode = getContainer(target);
        if (!targetNode) return 0;
        var y = targetNode.getBoundingClientRect().y;
        return y;
      };
      var handleClick = function handleClick(e) {
        var _props2$onClick;
        var y = getBackTo();
        scrollTo(y, {
          container: containerRef.value,
          duration: duration
        });
        (_props2$onClick = props2.onClick) === null || _props2$onClick === void 0 ? void 0 : _props2$onClick.call(props2, {
          e: e
        });
      };
      var positionStyle = computed(function () {
        return {
          insetInlineEnd: offset[0],
          insetBlockEnd: offset[1]
        };
      });
      return createVNode("button", {
        "type": "button",
        "class": cls.value,
        "style": positionStyle.value,
        "onClick": handleClick
      }, [renderContent("content", "default", defaultContent)]);
    };
  }
});

export { _BackTop as default };
//# sourceMappingURL=back-top.js.map
