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

'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var isNumber = require('lodash/isNumber');
var utils_renderTnode = require('../utils/render-tnode.js');
var configProvider_configReceiver = require('../config-provider/config-receiver.js');
var utils_mixins = require('../utils/mixins.js');
var skeleton_props = require('./props.js');
require('@babel/runtime/helpers/typeof');
require('vue');
require('@vue/composition-api');
require('lodash/camelCase');
require('lodash/kebabCase');
require('lodash/mergeWith');
require('../config-provider/context.js');
require('lodash/merge');
require('../_common/js/global-config/default-config.js');
require('../_common/js/global-config/locale/zh_CN.js');
require('../_chunks/dep-7c884501.js');
require('dayjs');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
var isNumber__default = /*#__PURE__*/_interopDefaultLegacy(isNumber);

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var classPrefixMixins = configProvider_configReceiver.getClassPrefixMixins("skeleton");
var ThemeMap = {
  "text": [1],
  "avatar": [{
    type: "circle",
    size: "56px"
  }],
  "paragraph": [1, 1, {
    width: "70%"
  }],
  "avatar-text": [[{
    type: "circle"
  }, {
    type: "text",
    height: "32px"
  }]],
  "tab": [{
    height: "30px"
  }, {
    height: "200px"
  }],
  "article": [{
    type: "rect",
    height: "30px",
    width: "100%"
  }, {
    type: "rect",
    height: "200px",
    width: "100%"
  }, [{
    type: "text",
    height: "30px"
  }, {
    type: "text",
    height: "30px"
  }, {
    type: "text",
    height: "30px"
  }], [{
    type: "text",
    height: "30px"
  }, {
    type: "text",
    height: "30px"
  }], [{
    type: "text",
    height: "30px"
  }, {
    type: "text",
    height: "30px"
  }], [{
    type: "text",
    height: "30px"
  }, {
    type: "text",
    height: "30px"
  }]]
};
var _Skeleton = utils_mixins["default"](classPrefixMixins).extend({
  name: "TSkeleton",
  props: _objectSpread({}, skeleton_props["default"]),
  data: function data() {
    return {
      delayShowLoading: this.delay <= 0 ? this.loading : false,
      delayTimer: 0
    };
  },
  watch: {
    loading: {
      handler: function handler(val) {
        if (this.delay <= 0) {
          this.delayShowLoading = this.loading;
          return;
        }
        this.handleDelay(val);
      },
      immediate: true
    }
  },
  methods: {
    handleDelay: function handleDelay(loading) {
      var _this = this;
      if (loading) {
        clearTimeout(this.delayTimer);
        this.delayTimer = window.setTimeout(function () {
          _this.delayShowLoading = _this.loading;
        }, this.delay);
      } else {
        this.delayShowLoading = loading;
      }
    },
    renderCols: function renderCols(_cols) {
      var _this2 = this;
      var h = this.$createElement;
      var getColItemClass = function getColItemClass(obj) {
        return ["".concat(_this2.componentName, "__col"), "".concat(_this2.componentName, "--type-").concat(obj.type || "text"), _defineProperty__default["default"]({}, "".concat(_this2.componentName, "--animation-").concat(_this2.animation), _this2.animation)];
      };
      var getColItemStyle = function getColItemStyle(obj) {
        var styleName = ["width", "height", "marginRight", "marginLeft", "margin", "size", "background", "backgroundColor"];
        var style = {};
        styleName.forEach(function (name) {
          if (name in obj) {
            var px = isNumber__default["default"](obj[name]) ? "".concat(obj[name], "px") : obj[name];
            if (name === "size") {
              var _ref2 = [px, px];
              style.width = _ref2[0];
              style.height = _ref2[1];
            } else style[name] = px;
          }
        });
        return style;
      };
      var cols = [];
      if (Array.isArray(_cols)) cols = _cols;else if (isNumber__default["default"](_cols)) cols = new Array(_cols).fill({
        type: "text"
      });else cols = [_cols];
      return cols.map(function (obj) {
        return h("div", {
          "class": getColItemClass(obj),
          "style": getColItemStyle(obj)
        }, [typeof obj.content === "function" ? obj.content(_this2.$createElement) : obj.content]);
      });
    },
    renderRowCol: function renderRowCol(_rowCol) {
      var _this3 = this;
      var h = this.$createElement;
      var rowCol = _rowCol || this.rowCol;
      var getBlockClass = function getBlockClass() {
        return ["".concat(_this3.componentName, "__row")];
      };
      return rowCol.map(function (item) {
        return h("div", {
          "class": getBlockClass()
        }, [_this3.renderCols(item)]);
      });
    }
  },
  render: function render() {
    var h = arguments[0];
    var content = utils_renderTnode.renderContent(this, "default", "content");
    if (this.$scopedSlots["default"] && !this.delayShowLoading) return h("div", [content]);
    if (!this.delayShowLoading) return;
    var children = [];
    if (this.theme) children.push(this.renderRowCol(ThemeMap[this.theme]));
    if (this.rowCol) children.push(this.renderRowCol(this.rowCol));
    if (!this.theme && !this.rowCol) {
      children.push(this.renderRowCol([1, 1, 1, {
        width: "70%"
      }]));
    }
    return h("div", {
      "class": this.componentName
    }, [children]);
  }
});

exports["default"] = _Skeleton;
//# sourceMappingURL=skeleton.js.map
