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

import { _ as _typeof } from '../_chunks/dep-255303ba.mjs';
import { _ as _toConsumableArray } from '../_chunks/dep-bf1e33c8.mjs';
import { _ as _defineProperty } from '../_chunks/dep-2db7b3ec.mjs';
import { _ as _slicedToArray } from '../_chunks/dep-84acf3c2.mjs';
import { isVNode, defineComponent, toRefs, computed, ref, watchEffect, h, provide, reactive, createVNode, mergeProps } from 'vue';
import { i as intersection_1 } from '../_chunks/dep-85ed244c.mjs';
import { i as isFunction_1 } from '../_chunks/dep-5717e263.mjs';
import { i as isObject_1 } from '../_chunks/dep-a8bcacea.mjs';
import { i as isUndefined_1 } from '../_chunks/dep-78847b2e.mjs';
import useVModel from '../hooks/useVModel.mjs';
import { usePrefixClass } from '../hooks/useConfig.mjs';
import { useTNodeJSX } from '../hooks/tnode.mjs';
import { useChildComponentSlots } from '../hooks/slot.mjs';
import _Checkbox from './checkbox.mjs';
import props from './checkbox-group-props.mjs';
import { CheckboxGroupInjectionKey } from './constants.mjs';
import '../_chunks/dep-b8d7992c.mjs';
import '../_chunks/dep-eba0ea6e.mjs';
import '../_chunks/dep-42cc3015.mjs';
import '../_chunks/dep-469b4ae0.mjs';
import '../_chunks/dep-b57180d0.mjs';
import '../_chunks/dep-c8d7b6b4.mjs';
import '../_chunks/dep-2bc37d52.mjs';
import '../_chunks/dep-3da99438.mjs';
import '../_chunks/dep-c42916c7.mjs';
import '../_chunks/dep-bc1d737a.mjs';
import '../_chunks/dep-4d7a675b.mjs';
import '../_chunks/dep-2e7f59b1.mjs';
import '../_chunks/dep-855db8bc.mjs';
import '../_chunks/dep-672e7d1a.mjs';
import '../_chunks/dep-dcc83161.mjs';
import '../_chunks/dep-9262ee2f.mjs';
import '../_chunks/dep-9fe2ef12.mjs';
import '../_chunks/dep-0fc02184.mjs';
import '../_chunks/dep-1e566bb5.mjs';
import '../_chunks/dep-9a85dac1.mjs';
import '../_chunks/dep-1372b2d3.mjs';
import '../config-provider/useConfig.mjs';
import '../_chunks/dep-095107f7.mjs';
import '../_chunks/dep-c989dff3.mjs';
import '../_chunks/dep-9cf86cf1.mjs';
import '../_chunks/dep-a87f3e4c.mjs';
import '../_chunks/dep-1434aa15.mjs';
import '../_chunks/dep-e5eb9f23.mjs';
import '../_chunks/dep-42a19209.mjs';
import '../_chunks/dep-334a4f6b.mjs';
import '../_chunks/dep-8d3e9aa3.mjs';
import '../_chunks/dep-876fb3ec.mjs';
import '../_chunks/dep-40d69a9c.mjs';
import '../_chunks/dep-f1994936.mjs';
import '../_chunks/dep-345e1be3.mjs';
import '../_common/js/global-config/default-config.mjs';
import '../_common/js/global-config/locale/zh_CN.mjs';
import '../_chunks/dep-9888611c.mjs';
import '../_chunks/dep-697a1365.mjs';
import '../config-provider/type.mjs';
import '../_chunks/dep-406cd044.mjs';
import '../_chunks/dep-327559e8.mjs';
import '../_chunks/dep-b2235f26.mjs';
import '../_chunks/dep-8b989474.mjs';
import '../utils/render-tnode.mjs';
import '../_chunks/dep-888e80c4.mjs';
import '../form/hooks.mjs';
import '../hooks/useRipple.mjs';
import '../utils/set-style.mjs';
import '../hooks/useKeepAnimation.mjs';
import './props.mjs';

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; }
function _isSlot(s) {
  return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !isVNode(s);
}
var _Group = defineComponent({
  name: "TCheckboxGroup",
  props: props,
  setup: function setup(props2) {
    var COMPONENT_NAME = usePrefixClass("checkbox-group");
    var renderTNodeJSX = useTNodeJSX();
    var isArray = Array.isArray;
    var _toRefs = toRefs(props2),
      value = _toRefs.value,
      modelValue = _toRefs.modelValue;
    var _useVModel = useVModel(value, modelValue, props2.defaultValue, props2.onChange),
      _useVModel2 = _slicedToArray(_useVModel, 2),
      innerValue = _useVModel2[0],
      setInnerValue = _useVModel2[1];
    var checkedMap = computed(function () {
      var map = {};
      if (isArray(innerValue.value)) {
        innerValue.value.forEach(function (item) {
          map[item] = true;
        });
      }
      return map;
    });
    var optionList = ref([]);
    var intersectionLen = computed(function () {
      if (!isArray(innerValue.value)) return 0;
      var values = optionList.value.map(function (item) {
        return item.value;
      });
      var n = intersection_1(innerValue.value, values);
      return n.length;
    });
    var isCheckAll = 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 = computed(function () {
      return !isCheckAll.value && intersectionLen.value < optionList.value.length && intersectionLen.value !== 0;
    });
    var maxExceeded = computed(function () {
      return !isUndefined_1(props2.max) && innerValue.value.length === props2.max;
    });
    watchEffect(function () {
      if (!props2.options) return [];
      optionList.value = props2.options.map(function (item) {
        var _item$disabled;
        return isObject_1(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(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(innerValue.value)));
        return;
      }
      var val = _toConsumableArray(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 = 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_1(option.label)) return option.label(h);
      return option.label;
    };
    var _toRefs2 = toRefs(props2),
      name = _toRefs2.name,
      disabled = _toRefs2.disabled;
    provide(CheckboxGroupInjectionKey, 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 createVNode(_Checkbox, 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 createVNode("div", {
        "class": COMPONENT_NAME.value
      }, [children]);
    };
  }
});

export { _Group as default };
//# sourceMappingURL=group.mjs.map
