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

import Vue from 'vue';
import raf from 'raf';
import isFunction from 'lodash/isFunction';
import { removeDom, getAttach } from '../utils/dom.js';
import { observeResize } from './utils.js';
import Trigger from './trigger.js';
import 'lodash/isString';
import '../utils/easing.js';

var Container = Vue.extend({
  name: "Trigger",
  props: {
    parent: Object,
    visible: Boolean,
    attach: [Function]
  },
  data: function data() {
    return {
      content: null
    };
  },
  mounted: function mounted() {
    var _this = this;
    if (this.visible) raf(this.mountContent);
    this.$watch("visible", function (visible) {
      if (visible) _this.mountContent();
    });
  },
  destroyed: function destroyed() {
    var _process$env;
    if (typeof process !== "undefined" && ((_process$env = process.env) === null || _process$env === void 0 ? void 0 : _process$env.NODE_ENV) === "test") return;
    this.unmountContent();
  },
  methods: {
    mountContent: function mountContent() {
      var _this$$refs, _this$$refs$triggerRe;
      if (this.content) return;
      var parent = this;
      var elm = document.createElement("div");
      elm.style.cssText = "position: absolute; top: 0px; left: 0px; width: 100%";
      elm.appendChild(document.createElement("div"));
      this.content = new this.$root.constructor({
        parent: parent,
        render: function render() {
          return parent.$slots.content;
        },
        mounted: function mounted() {
          parent.$emit("contentMounted");
          var content = this.$el.children[0];
          if (content) {
            this.$on("hook:destroyed", observeResize(content, function () {
              parent.$emit("resize");
            }));
          }
        },
        destroyed: function destroyed() {
          parent.content = null;
          removeDom(elm);
        }
      });
      var _this$attach = this.attach(),
        attach = _this$attach.attach,
        current = _this$attach.current;
      var currentAttach = attach === "CURRENT_NODE" ? current : attach;
      getAttach(currentAttach, (_this$$refs = this.$refs) === null || _this$$refs === void 0 ? void 0 : (_this$$refs$triggerRe = _this$$refs.triggerRef) === null || _this$$refs$triggerRe === void 0 ? void 0 : _this$$refs$triggerRe.$el).appendChild(elm);
      this.content.$mount(elm.children[0]);
    },
    unmountContent: function unmountContent() {
      var _this$content;
      if (isFunction((_this$content = this.content) === null || _this$content === void 0 ? void 0 : _this$content.$destroy)) this.content.$destroy();
    },
    updateContent: function updateContent() {
      var _this$content2;
      (_this$content2 = this.content) === null || _this$content2 === void 0 ? void 0 : _this$content2.$forceUpdate();
    }
  },
  render: function render() {
    var _this2 = this;
    var h = arguments[0];
    return h(Trigger, {
      "ref": "triggerRef",
      "on": {
        "resize": function resize() {
          return _this2.$emit("resize");
        }
      }
    }, [this.$slots["default"]]);
  }
});

export { Container as default };
//# sourceMappingURL=container.js.map
