import { defineComponent, ref, watch, createVNode, mergeProps } from 'vue';
import classNames from '../_util/classNames.mjs';
import PropTypes from '../_util/vue-types/index.mjs';
import '../_util/props-util/index.mjs';
import initDefaultProps from '../_util/props-util/initDefaultProps.mjs';

const checkboxProps = {
  prefixCls: String,
  name: String,
  id: String,
  type: String,
  defaultChecked: {
    type: [Boolean, Number],
    default: void 0
  },
  checked: {
    type: [Boolean, Number],
    default: void 0
  },
  disabled: Boolean,
  tabindex: {
    type: [Number, String]
  },
  readonly: Boolean,
  autofocus: Boolean,
  value: PropTypes.any,
  required: Boolean
};
var VcCheckbox = /* @__PURE__ */ defineComponent({
  compatConfig: {
    MODE: 3
  },
  name: "Checkbox",
  inheritAttrs: false,
  props: initDefaultProps(checkboxProps, {
    prefixCls: "rc-checkbox",
    type: "checkbox",
    defaultChecked: false
  }),
  emits: ["click", "change"],
  setup(props, {
    attrs,
    emit,
    expose
  }) {
    const checked = ref(props.checked === void 0 ? props.defaultChecked : props.checked);
    const inputRef = ref();
    watch(() => props.checked, () => {
      checked.value = props.checked;
    });
    expose({
      focus() {
        var _a;
        (_a = inputRef.value) == null ? void 0 : _a.focus();
      },
      blur() {
        var _a;
        (_a = inputRef.value) == null ? void 0 : _a.blur();
      }
    });
    const eventShiftKey = ref();
    const handleChange = (e) => {
      if (props.disabled)
        return;
      if (props.checked === void 0)
        checked.value = e.target.checked;
      e.shiftKey = eventShiftKey.value;
      const eventObj = {
        target: {
          ...props,
          checked: e.target.checked
        },
        stopPropagation() {
          e.stopPropagation();
        },
        preventDefault() {
          e.preventDefault();
        },
        nativeEvent: e
      };
      if (props.checked !== void 0)
        inputRef.value.checked = !!props.checked;
      emit("change", eventObj);
      eventShiftKey.value = false;
    };
    const onClick = (e) => {
      emit("click", e);
      eventShiftKey.value = e.shiftKey;
    };
    return () => {
      const {
        prefixCls,
        name,
        id,
        type,
        disabled,
        readonly,
        tabindex,
        autofocus,
        value,
        required,
        ...others
      } = props;
      const {
        class: className,
        onFocus,
        onBlur,
        onKeydown,
        onKeypress,
        onKeyup
      } = attrs;
      const othersAndAttrs = {
        ...others,
        ...attrs
      };
      const globalProps = Object.keys(othersAndAttrs).reduce((prev, key) => {
        if (key.startsWith("data-") || key.startsWith("aria-") || key === "role")
          prev[key] = othersAndAttrs[key];
        return prev;
      }, {});
      const classString = classNames(prefixCls, className, {
        [`${prefixCls}-checked`]: checked.value,
        [`${prefixCls}-disabled`]: disabled
      });
      const inputProps = {
        name,
        id,
        type,
        readonly,
        disabled,
        tabindex,
        class: `${prefixCls}-input`,
        checked: !!checked.value,
        autofocus,
        value,
        ...globalProps,
        onChange: handleChange,
        onClick,
        onFocus,
        onBlur,
        onKeydown,
        onKeypress,
        onKeyup,
        required
      };
      return createVNode("span", {
        "class": classString
      }, [createVNode("input", mergeProps({
        "ref": inputRef
      }, inputProps), null), createVNode("span", {
        "class": `${prefixCls}-inner`
      }, null)]);
    };
  }
});

export { checkboxProps, VcCheckbox as default };
//# sourceMappingURL=Checkbox.mjs.map
