diff --git a/.gitignore b/.gitignore
index afbd116c..cf7cd952 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,5 @@
node_modules
coverage
-dist
.opt-in
.opt-out
.DS_Store
diff --git a/dist/extend-expect.js b/dist/extend-expect.js
new file mode 100644
index 00000000..1dac7536
--- /dev/null
+++ b/dist/extend-expect.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
+
+var extensions = _interopRequireWildcard(require("./index"));
+
+expect.extend(extensions);
\ No newline at end of file
diff --git a/dist/index.js b/dist/index.js
new file mode 100644
index 00000000..0bb804f5
--- /dev/null
+++ b/dist/index.js
@@ -0,0 +1,153 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "toBeInTheDOM", {
+ enumerable: true,
+ get: function () {
+ return _toBeInTheDom.toBeInTheDOM;
+ }
+});
+Object.defineProperty(exports, "toBeInTheDocument", {
+ enumerable: true,
+ get: function () {
+ return _toBeInTheDocument.toBeInTheDocument;
+ }
+});
+Object.defineProperty(exports, "toBeEmpty", {
+ enumerable: true,
+ get: function () {
+ return _toBeEmpty.toBeEmpty;
+ }
+});
+Object.defineProperty(exports, "toContainElement", {
+ enumerable: true,
+ get: function () {
+ return _toContainElement.toContainElement;
+ }
+});
+Object.defineProperty(exports, "toContainHTML", {
+ enumerable: true,
+ get: function () {
+ return _toContainHtml.toContainHTML;
+ }
+});
+Object.defineProperty(exports, "toHaveTextContent", {
+ enumerable: true,
+ get: function () {
+ return _toHaveTextContent.toHaveTextContent;
+ }
+});
+Object.defineProperty(exports, "toHaveAttribute", {
+ enumerable: true,
+ get: function () {
+ return _toHaveAttribute.toHaveAttribute;
+ }
+});
+Object.defineProperty(exports, "toHaveClass", {
+ enumerable: true,
+ get: function () {
+ return _toHaveClass.toHaveClass;
+ }
+});
+Object.defineProperty(exports, "toHaveStyle", {
+ enumerable: true,
+ get: function () {
+ return _toHaveStyle.toHaveStyle;
+ }
+});
+Object.defineProperty(exports, "toHaveFocus", {
+ enumerable: true,
+ get: function () {
+ return _toHaveFocus.toHaveFocus;
+ }
+});
+Object.defineProperty(exports, "toHaveFormValues", {
+ enumerable: true,
+ get: function () {
+ return _toHaveFormValues.toHaveFormValues;
+ }
+});
+Object.defineProperty(exports, "toBeVisible", {
+ enumerable: true,
+ get: function () {
+ return _toBeVisible.toBeVisible;
+ }
+});
+Object.defineProperty(exports, "toBeDisabled", {
+ enumerable: true,
+ get: function () {
+ return _toBeDisabled.toBeDisabled;
+ }
+});
+Object.defineProperty(exports, "toBeEnabled", {
+ enumerable: true,
+ get: function () {
+ return _toBeDisabled.toBeEnabled;
+ }
+});
+Object.defineProperty(exports, "toBeRequired", {
+ enumerable: true,
+ get: function () {
+ return _toBeRequired.toBeRequired;
+ }
+});
+Object.defineProperty(exports, "toBeInvalid", {
+ enumerable: true,
+ get: function () {
+ return _toBeInvalid.toBeInvalid;
+ }
+});
+Object.defineProperty(exports, "toBeValid", {
+ enumerable: true,
+ get: function () {
+ return _toBeInvalid.toBeValid;
+ }
+});
+Object.defineProperty(exports, "toHaveValue", {
+ enumerable: true,
+ get: function () {
+ return _toHaveValue.toHaveValue;
+ }
+});
+Object.defineProperty(exports, "toBeChecked", {
+ enumerable: true,
+ get: function () {
+ return _toBeChecked.toBeChecked;
+ }
+});
+
+var _toBeInTheDom = require("./to-be-in-the-dom");
+
+var _toBeInTheDocument = require("./to-be-in-the-document");
+
+var _toBeEmpty = require("./to-be-empty");
+
+var _toContainElement = require("./to-contain-element");
+
+var _toContainHtml = require("./to-contain-html");
+
+var _toHaveTextContent = require("./to-have-text-content");
+
+var _toHaveAttribute = require("./to-have-attribute");
+
+var _toHaveClass = require("./to-have-class");
+
+var _toHaveStyle = require("./to-have-style");
+
+var _toHaveFocus = require("./to-have-focus");
+
+var _toHaveFormValues = require("./to-have-form-values");
+
+var _toBeVisible = require("./to-be-visible");
+
+var _toBeDisabled = require("./to-be-disabled");
+
+var _toBeRequired = require("./to-be-required");
+
+var _toBeInvalid = require("./to-be-invalid");
+
+var _toHaveValue = require("./to-have-value");
+
+var _toBeChecked = require("./to-be-checked");
\ No newline at end of file
diff --git a/dist/to-be-checked.js b/dist/to-be-checked.js
new file mode 100644
index 00000000..19ef4ed2
--- /dev/null
+++ b/dist/to-be-checked.js
@@ -0,0 +1,40 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.toBeChecked = toBeChecked;
+
+var _jestMatcherUtils = require("jest-matcher-utils");
+
+var _utils = require("./utils");
+
+function toBeChecked(element) {
+ (0, _utils.checkHtmlElement)(element, toBeChecked, this);
+
+ const isValidInput = () => {
+ return element.tagName.toLowerCase() === 'input' && ['checkbox', 'radio'].includes(element.type);
+ };
+
+ if (!isValidInput() && !(() => {
+ return ['checkbox', 'radio'].includes(element.getAttribute('role')) && ['true', 'false'].includes(element.getAttribute('aria-checked'));
+ })()) {
+ return {
+ pass: false,
+ message: () => 'only inputs with type="checkbox" or type="radio" or elements with role="checkbox" or role="radio" 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 [(0, _jestMatcherUtils.matcherHint)(`${this.isNot ? '.not' : ''}.toBeChecked`, 'element', ''), '', `Received element ${is} checked:`, ` ${(0, _jestMatcherUtils.printReceived)(element.cloneNode(false))}`].join('\n');
+ }
+ };
+}
\ No newline at end of file
diff --git a/dist/to-be-disabled.js b/dist/to-be-disabled.js
new file mode 100644
index 00000000..60f432d8
--- /dev/null
+++ b/dist/to-be-disabled.js
@@ -0,0 +1,63 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.toBeDisabled = toBeDisabled;
+exports.toBeEnabled = toBeEnabled;
+
+var _jestMatcherUtils = require("jest-matcher-utils");
+
+var _utils = require("./utils");
+
+const FORM_TAGS = ['fieldset', 'input', 'select', 'optgroup', 'option', 'button', 'textarea'];
+/*
+ * According to specification:
+ * If