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

'use strict';

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

var _typeof = require('@babel/runtime/helpers/typeof');
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
var vue = require('vue');
var intersection = require('lodash/intersection');
var isFunction = require('lodash/isFunction');
var isObject = require('lodash/isObject');
var isUndefined = require('lodash/isUndefined');
var hooks_useVModel = require('../hooks/useVModel.js');
var hooks_useConfig = require('../hooks/useConfig.js');
var hooks_tnode = require('../hooks/tnode.js');
var hooks_slot = require('../hooks/slot.js');
var checkbox_checkbox = require('./checkbox.js');
var checkbox_checkboxGroupProps = require('./checkbox-group-props.js');
var checkbox_constants = require('./constants.js');
require('lodash/kebabCase');
require('../config-provider/useConfig.js');
require('lodash/cloneDeep');
require('lodash/isString');
require('../config-provider/context.js');
require('lodash/mergeWith');
require('lodash/merge');
require('lodash/isArray');
require('../_common/js/global-config/default-config.js');
require('../_common/js/global-config/locale/zh_CN.js');
require('../_chunks/dep-7f0559c3.js');
require('dayjs');
require('lodash/camelCase');
require('../utils/render-tnode.js');
require('lodash/isEmpty');
require('../form/hooks.js');
require('../hooks/useRipple.js');
require('../utils/set-style.js');
require('../hooks/useKeepAnimation.js');
require('./props.js');

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

var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
var intersection__default = /*#__PURE__*/_interopDefaultLegacy(intersection);
var isFunction__default = /*#__PURE__*/_interopDefaultLegacy(isFunction);
var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
var isUndefined__default = /*#__PURE__*/_interopDefaultLegacy(isUndefined);

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; }
function _isSlot(s) {
  return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !vue.isVNode(s);
}
var _Group = vue.defineComponent({
  name: "TCheckboxGroup",
  props: checkbox_checkboxGroupProps["default"],
  setup: function setup(props2) {
    var COMPONENT_NAME = hooks_useConfig.usePrefixClass("checkbox-group");
    var renderTNodeJSX = hooks_tnode.useTNodeJSX();
    var isArray = Array.isArray;
    var _toRefs = vue.toRefs(props2),
      value = _toRefs.value,
      modelValue = _toRefs.modelValue;
    var _useVModel = hooks_useVModel["default"](value, modelValue, props2.defaultValue, props2.onChange),
      _useVModel2 = _slicedToArray__default["default"](_useVModel, 2),
      innerValue = _useVModel2[0],
      setInnerValue = _useVModel2[1];
    var checkedMap = vue.computed(function () {
      var map = {};
      if (isArray(innerValue.value)) {
        innerValue.value.forEach(function (item) {
          map[item] = true;
        });
      }
      return map;
    });
    var optionList = vue.ref([]);
    var intersectionLen = vue.computed(function () {
      if (!isArray(innerValue.value)) return 0;
      var values = optionList.value.map(function (item) {
        return item.value;
      });
      var n = intersection__default["default"](innerValue.value, values);
      return n.length;
    });
    var isCheckAll = vue.computed(function () {
      var excludeCount = optionList.value.filter(function (item) {
        return item.disabled || item.checkAll;
      }).length;
      if (isArray(innerValue.value) && innerValue.value.length !== optionList.value.length - excludeCount) return false;
      return intersectionLen.value === optionList.value.length - excludeCount;
    });
    var indeterminate = vue.computed(function () {
      return !isCheckAll.value && intersectionLen.value < optionList.value.length && intersectionLen.value !== 0;
    });
    var maxExceeded = vue.computed(function () {
      return !isUndefined__default["default"](props2.max) && innerValue.value.length === props2.max;
    });
    vue.watchEffect(function () {
      if (!props2.options) return [];
      optionList.value = props2.options.map(function (item) {
        var _item$disabled;
        return isObject__default["default"](item) ? _objectSpread(_objectSpread({}, item), {}, {
          disabled: (_item$disabled = item.disabled) !== null && _item$disabled !== void 0 ? _item$disabled : props2.disabled
        }) : {
          label: String(item),
          value: item
        };
      });
    });
    var getAllCheckboxValue = function getAllCheckboxValue() {
      var val = /* @__PURE__ */new Set();
      for (var i = 0, len = optionList.value.length; i < len; i++) {
        var item = optionList.value[i];
        if (item.checkAll) continue;
        if (item.disabled) continue;
        val.add(item.value);
        if (maxExceeded.value) break;
      }
      return _toConsumableArray__default["default"](val);
    };
    var onCheckAllChange = function onCheckAllChange(checked, context) {
      var value2 = checked ? getAllCheckboxValue() : [];
      setInnerValue(value2, {
        e: context.e,
        type: checked ? "check" : "uncheck",
        current: void 0,
        option: void 0
      });
    };
    var handleCheckboxChange = function handleCheckboxChange(data) {
      var currentValue = data.option.value;
      if (!isArray(innerValue.value)) {
        console.warn("TDesign CheckboxGroup Warn: `value` must be an array, instead of ".concat(_typeof__default["default"](innerValue.value)));
        return;
      }
      var val = _toConsumableArray__default["default"](innerValue.value);
      if (data.checked) {
        val.push(currentValue);
      } else {
        var i = val.indexOf(currentValue);
        val.splice(i, 1);
      }
      setInnerValue(val, {
        e: data.e,
        current: data.option.value,
        option: data.option,
        type: data.checked ? "check" : "uncheck"
      });
    };
    var onCheckedChange = function onCheckedChange(p) {
      var checked = p.checked,
        checkAll = p.checkAll,
        e = p.e;
      if (checkAll) onCheckAllChange(checked, {
        e: e
      });else handleCheckboxChange(p);
    };
    var getChildComponentSlots = hooks_slot.useChildComponentSlots();
    var getOptionListBySlots = function getOptionListBySlots() {
      var nodes = getChildComponentSlots("Checkbox");
      var arr = [];
      nodes === null || nodes === void 0 ? void 0 : nodes.forEach(function (node) {
        var option = node.props;
        if (!option) return;
        if (option["check-all"] === "" || option["check-all"] === true) option.checkAll = true;
        arr.push(option);
      });
      return arr;
    };
    var renderLabel = function renderLabel(option) {
      if (isFunction__default["default"](option.label)) return option.label(vue.h);
      return option.label;
    };
    var _toRefs2 = vue.toRefs(props2),
      name = _toRefs2.name,
      disabled = _toRefs2.disabled;
    vue.provide(checkbox_constants.CheckboxGroupInjectionKey, vue.reactive({
      name: name,
      isCheckAll: isCheckAll,
      checkedMap: checkedMap,
      maxExceeded: maxExceeded,
      disabled: disabled,
      indeterminate: indeterminate,
      handleCheckboxChange: handleCheckboxChange,
      onCheckedChange: onCheckedChange
    }));
    return function () {
      var _props2$options;
      var children = null;
      if ((_props2$options = props2.options) !== null && _props2$options !== void 0 && _props2$options.length) {
        var _optionList$value;
        children = (_optionList$value = optionList.value) === null || _optionList$value === void 0 ? void 0 : _optionList$value.map(function (option, index) {
          var _slot;
          return vue.createVNode(checkbox_checkbox["default"], vue.mergeProps({
            "key": "".concat(option.value).concat(index)
          }, option, {
            "checked": checkedMap.value[option.value]
          }), _isSlot(_slot = renderLabel(option)) ? _slot : {
            "default": function _default() {
              return [_slot];
            }
          });
        });
      } else {
        var nodes = renderTNodeJSX("default");
        optionList.value = getOptionListBySlots();
        children = nodes;
      }
      return vue.createVNode("div", {
        "class": COMPONENT_NAME.value
      }, [children]);
    };
  }
});

exports["default"] = _Group;
//# sourceMappingURL=group.js.map
