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

import { h as helper } from '../_chunks/dep-c89aafbb.js';
import _typeof from '@babel/runtime/helpers/typeof';
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import { defineComponent, ref, computed } from '@vue/composition-api';
import isFunction from 'lodash/isFunction';
import { getColumnFixedStyles } from './hooks/useFixed.js';
import useClassName from './hooks/useClassName.js';
import { renderTitle } from './hooks/useTableHeader.js';
import TEllipsis from './ellipsis.js';
import { formatClassNames } from './utils.js';
import '@babel/runtime/helpers/slicedToArray';
import 'lodash/get';
import 'lodash/debounce';
import '../_common/js/log/index.js';
import '../_common/js/log/log.js';
import '../_common/js/utils/getScrollbarWidth.js';
import '../_common/js/utils/helper.js';
import '@babel/runtime/helpers/toConsumableArray';
import '@babel/runtime/helpers/objectWithoutProperties';
import 'lodash/isString';
import 'lodash/isNull';
import 'lodash/isUndefined';
import 'lodash/isNumber';
import 'lodash/isArray';
import '../utils/dom.js';
import 'vue';
import 'raf';
import '../utils/easing.js';
import '../config-provider/useConfig.js';
import '../config-provider/context.js';
import 'lodash/merge';
import 'lodash/mergeWith';
import '../_common/js/global-config/default-config.js';
import '../_common/js/global-config/locale/zh_CN.js';
import '../_chunks/dep-be599ec8.js';
import 'dayjs';
import '../_chunks/dep-67ff4010.js';
import '../config-provider/type.js';
import './hooks/useMultiHeader.js';
import '../utils/render-tnode.js';
import 'lodash/camelCase';
import 'lodash/kebabCase';
import '../tooltip/index.js';
import '../utils/map-props.js';
import '../utils/withInstall.js';
import 'lodash/capitalize';
import '../tooltip/tooltip.js';
import '../popup/props.js';
import '../popup/popup.js';
import '@popperjs/core';
import '../utils/helper.js';
import '../_common/js/utils/set-style.js';
import '../config-provider/config-receiver.js';
import '../utils/mixins.js';
import '../utils/event.js';
import '../popup/container.js';
import '../popup/utils.js';
import '../popup/trigger.js';
import '../tooltip/props.js';
import '../tooltip/style/css.js';
import '../tooltip/type.js';
import 'lodash/isObject';

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(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 THead = defineComponent({
  name: "THead",
  props: {
    ellipsisOverlayClassName: String,
    isFixedHeader: Boolean,
    thDraggable: Boolean,
    maxHeight: [String, Number],
    height: [String, Number],
    rowAndColFixedPosition: Map,
    thWidthList: Object,
    bordered: Boolean,
    isMultipleHeader: Boolean,
    resizable: Boolean,
    spansAndLeafNodes: Object,
    thList: Array,
    columnResizeParams: Object,
    attach: [String, Function],
    showColumnShadow: Object
  },
  setup: function setup(props, _ref) {
    var slots = _ref.slots;
    var theadRef = ref();
    var classnames = useClassName();
    var tableHeaderClasses = classnames.tableHeaderClasses,
      tableBaseClass = classnames.tableBaseClass;
    var theadClasses = computed(function () {
      var _ref2;
      return [tableHeaderClasses.header, (_ref2 = {}, _defineProperty(_ref2, tableHeaderClasses.fixed, Boolean(props.maxHeight || props.height)), _defineProperty(_ref2, tableBaseClass.bordered, props.bordered && props.isMultipleHeader), _defineProperty(_ref2, tableHeaderClasses.multipleHeader, props.isMultipleHeader), _ref2)];
    });
    var colspanSkipMap = computed(function () {
      var map = {};
      var list = props.thList[0];
      for (var i = 0, len = list.length; i < len; i++) {
        var item = list[i];
        if (item.colspan > 1) {
          for (var j = i + 1; j < i + item.colspan; j++) {
            if (list[j]) map[list[j].colKey] = true;
          }
        }
      }
      return map;
    });
    var getTableNode = function getTableNode(thead) {
      var parent = thead;
      while (parent) {
        var _parent, _parent$classList;
        parent = parent.parentNode;
        if ((_parent = parent) !== null && _parent !== void 0 && (_parent$classList = _parent.classList) !== null && _parent$classList !== void 0 && _parent$classList.contains("".concat(props.classPrefix, "-table"))) break;
      }
      return parent;
    };
    return _objectSpread(_objectSpread({}, classnames), {}, {
      colspanSkipMap: colspanSkipMap,
      theadRef: theadRef,
      theadClasses: theadClasses,
      slots: slots,
      getTableNode: getTableNode
    });
  },
  render: function render(h) {
    var _this = this;
    var renderThNodeList = function renderThNodeList(h2, rowAndColFixedPosition, thWidthList) {
      var thBorderMap = /* @__PURE__ */new Map();
      var thRowspanAndColspan = _this.spansAndLeafNodes.rowspanAndColspanMap;
      return _this.thList.map(function (row, rowIndex) {
        var thRow = row.map(function (col, index) {
          var _ref3, _col$children;
          if (_this.colspanSkipMap[col.colKey]) return null;
          var rowspanAndColspan = thRowspanAndColspan.get(col);
          if (index === 0 && rowspanAndColspan.rowspan > 1) {
            for (var j = rowIndex + 1; j < rowIndex + rowspanAndColspan.rowspan; j++) thBorderMap.set(_this.thList[j][0], true);
          }
          var thStyles = getColumnFixedStyles(col, index, rowAndColFixedPosition, _this.tableColFixedClasses);
          var colParams = {
            col: col,
            colIndex: index,
            row: {},
            rowIndex: -1
          };
          var customClasses = formatClassNames(col.className, _objectSpread(_objectSpread({}, colParams), {}, {
            type: "th"
          }));
          var isLeftFixedActive = _this.showColumnShadow.left && col.fixed === "left";
          var isRightFixedActive = _this.showColumnShadow.right && col.fixed === "right";
          var canDragSort = _this.thDraggable && !(isLeftFixedActive || isRightFixedActive);
          var thClasses = [thStyles.classes, customClasses, (_ref3 = {}, _defineProperty(_ref3, _this.tableHeaderClasses.thBordered, thBorderMap.get(col)), _defineProperty(_ref3, "".concat(_this.classPrefix, "-table__th-").concat(col.colKey), col.colKey), _defineProperty(_ref3, _this.tdAlignClasses[col.align], col.align && col.align !== "left"), _defineProperty(_ref3, _this.tableDraggableClasses.dragSortTh, canDragSort), _ref3)];
          var withoutChildren = !((_col$children = col.children) !== null && _col$children !== void 0 && _col$children.length);
          var width = withoutChildren && thWidthList !== null && thWidthList !== void 0 && thWidthList[col.colKey] ? "".concat(thWidthList === null || thWidthList === void 0 ? void 0 : thWidthList[col.colKey], "px") : void 0;
          var styles = _objectSpread(_objectSpread({}, thStyles.style || {}), {}, {
            width: width
          });
          var innerTh = renderTitle(h2, _this.slots, col, index);
          var resizeColumnListener = _this.resizable || !canDragSort ? {
            mousedown: function mousedown(e) {
              var _this$columnResizePar, _this$columnResizePar2;
              e.stopPropagation();
              if (_this.resizable) (_this$columnResizePar = _this.columnResizeParams) === null || _this$columnResizePar === void 0 ? void 0 : (_this$columnResizePar2 = _this$columnResizePar.onColumnMousedown) === null || _this$columnResizePar2 === void 0 ? void 0 : _this$columnResizePar2.call(_this$columnResizePar, e, col, index);
              if (!canDragSort) {
                var timer = setTimeout(function () {
                  var _thList$index;
                  var thList = _this.theadRef.querySelectorAll("th");
                  (_thList$index = thList[index]) === null || _thList$index === void 0 ? void 0 : _thList$index.removeAttribute("draggable");
                  clearTimeout(timer);
                }, 10);
              }
            },
            mousemove: function mousemove(e) {
              var _this$columnResizePar3, _this$columnResizePar4;
              _this.resizable && ((_this$columnResizePar3 = _this.columnResizeParams) === null || _this$columnResizePar3 === void 0 ? void 0 : (_this$columnResizePar4 = _this$columnResizePar3.onColumnMouseover) === null || _this$columnResizePar4 === void 0 ? void 0 : _this$columnResizePar4.call(_this$columnResizePar3, e, col));
            }
          } : {};
          var content = isFunction(col.ellipsisTitle) ? col.ellipsisTitle(h2, {
            col: col,
            colIndex: index
          }) : void 0;
          var isEllipsis = col.ellipsisTitle !== void 0 ? Boolean(col.ellipsisTitle) : Boolean(col.ellipsis);
          var attrs = (isFunction(col.attrs) ? col.attrs(_objectSpread(_objectSpread({}, colParams), {}, {
            type: "th"
          })) : col.attrs) || {};
          if (col.colspan > 1) attrs.colspan = col.colspan;
          return h("th", helper([{
            "key": col.colKey,
            "attrs": {
              "data-colkey": col.colKey
            },
            "class": thClasses,
            "style": styles
          }, {
            "attrs": _objectSpread(_objectSpread({}, attrs), rowspanAndColspan)
          }, {}, {
            "on": resizeColumnListener
          }]), [h("div", {
            "class": _this.tableBaseClass.thCellInner
          }, [isEllipsis ? h(TEllipsis, {
            "attrs": {
              "placement": "bottom",
              "attach": _this.attach || (_this.theadRef ? function () {
                return _this.getTableNode(_this.theadRef);
              } : void 0),
              "tooltipContent": content && function () {
                return content;
              },
              "tooltipProps": _typeof(col.ellipsisTitle) === "object" ? col.ellipsisTitle : void 0,
              "overlayClassName": _this.ellipsisOverlayClassName,
              "classPrefix": _this.classPrefix
            }
          }, [innerTh]) : innerTh])]);
        });
        return h("tr", {
          "key": rowIndex
        }, [thRow]);
      });
    };
    return h("thead", {
      "ref": "theadRef",
      "class": this.theadClasses
    }, [renderThNodeList(h, this.rowAndColFixedPosition, this.thWidthList)]);
  }
});

export { THead as default };
//# sourceMappingURL=thead.js.map
