import { __exports as toBeChecked$1 } from "../../../../_virtual/to-be-checked.js";
import "../../../aria-query/lib/index.js";
import "./utils.js";
import { __exports as lib } from "../../../../_virtual/index4.js";
import { __exports as utils } from "../../../../_virtual/utils.js";
Object.defineProperty(toBeChecked$1, "__esModule", {
  value: true
});
toBeChecked$1.toBeChecked = toBeChecked;
var _ariaQuery = lib;
var _utils = utils;
function toBeChecked(element) {
  (0, _utils.checkHtmlElement)(element, toBeChecked, this);
  const isValidInput = () => {
    return element.tagName.toLowerCase() === "input" && ["checkbox", "radio"].includes(element.type);
  };
  const isValidAriaElement = () => {
    return roleSupportsChecked(element.getAttribute("role")) && ["true", "false"].includes(element.getAttribute("aria-checked"));
  };
  if (!isValidInput() && !isValidAriaElement()) {
    return {
      pass: false,
      message: () => `only inputs with type="checkbox" or type="radio" or elements with ${supportedRolesSentence()} and a valid aria-checked attribute can be used with .toBeChecked(). Use .toHaveValue() instead`
    };
  }
  const isChecked = () => {
    if (isValidInput())
      return element.checked;
    return element.getAttribute("aria-checked") === "true";
  };
  return {
    pass: isChecked(),
    message: () => {
      const is = isChecked() ? "is" : "is not";
      return [this.utils.matcherHint(`${this.isNot ? ".not" : ""}.toBeChecked`, "element", ""), "", `Received element ${is} checked:`, `  ${this.utils.printReceived(element.cloneNode(false))}`].join("\n");
    }
  };
}
function supportedRolesSentence() {
  return (0, _utils.toSentence)(supportedRoles().map((role) => `role="${role}"`), {
    lastWordConnector: " or "
  });
}
function supportedRoles() {
  return _ariaQuery.roles.keys().filter(roleSupportsChecked);
}
function roleSupportsChecked(role) {
  var _roles$get;
  return ((_roles$get = _ariaQuery.roles.get(role)) == null ? void 0 : _roles$get.props["aria-checked"]) !== void 0;
}
export {
  toBeChecked$1 as default
};
//# sourceMappingURL=to-be-checked.js.map
