diff --git a/.gitignore b/.gitignore
index ec63435..22f3621 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,28 @@
+### custom ###
+
+# build output
build/
+# test coverage output
coverage/
+### Node ###
+
+# Logs
+logs
+*.log
npm-debug.log*
+
+# Dependency directories
node_modules/
+# Optional npm cache directory
+.npm
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
*.tgz
-.DS_Store
-*~
+# dotenv environment variables file
+.env
diff --git a/.travis.yml b/.travis.yml
index ba455b9..f8934a7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,6 @@
language: node_js
# default is the very old 0.10.48; match local version instead
-node_js: '8.9'
+node_js: '10.16.0'
before_script: npm run lint
script: npm test -- --coverage
diff --git a/README.md b/README.md
index 4480a15..e3e055c 100644
--- a/README.md
+++ b/README.md
@@ -8,15 +8,15 @@
[](https://npmjs.org/package/react-signature-canvas)
[](https://github.com/agilgur5/react-signature-canvas/releases)
-[](https://github.com/agilgur5/react-signature-canvas/commits/master)
+[](https://github.com/agilgur5/react-signature-canvas/commits/main)
[](https://npmjs.org/package/react-signature-canvas)
[](https://npmjs.org/package/react-signature-canvas)
[](https://npmjs.org/package/react-signature-canvas)
[](https://npmjs.org/package/react-signature-canvas)
-[](https://travis-ci.org/agilgur5/react-signature-canvas)
-[](https://codecov.io/gh/agilgur5/react-signature-canvas)
+[](https://app.travis-ci.com/github/agilgur5/react-signature-canvas/branches)
+[](https://codecov.io/gh/agilgur5/react-signature-canvas)
[](https://npmjs.org/package/react-signature-canvas)
diff --git a/jest.config.js b/jest.config.js
index 5b40fc7..5dfac61 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -1,13 +1,11 @@
module.exports = {
- moduleNameMapper: {
- // allow importing of Jest as an ES Module (https://github.com/facebook/jest/pull/7571#issuecomment-498634094)
- '^jest$': '/test-utils/jest-export.js'
- },
+ // Jest 24 defaults to JSDOM 11, upgrade to 15 to support canvas@2
+ testEnvironment: 'jest-environment-jsdom-fifteen',
setupFilesAfterEnv: [
// configure enzyme w/ react adapter
- '/test-utils/configure-enzyme.js',
+ '/test/config/configure-enzyme.js',
// polyfill window.resizeTo
- '/test-utils/window-resizeTo.js'
+ 'window-resizeto/polyfill'
],
transform: {
// use babel-jest@23 for babel@6 support (https://github.com/facebook/jest/issues/8230#issuecomment-479470547)
@@ -15,6 +13,6 @@ module.exports = {
},
coveragePathIgnorePatterns: [
'/node_modules/', // default
- '/test-utils/' // ignore test-utils
+ '/test/' // ignore any test helper files
]
}
diff --git a/package-lock.json b/package-lock.json
index dc76d5a..e78534e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3354,13 +3354,41 @@
"integrity": "sha1-zcUu/o+C3RORZhW3job3BOzmGAI=",
"dev": true
},
- "canvas-prebuilt": {
- "version": "1.6.11",
- "resolved": "https://registry.npmjs.org/canvas-prebuilt/-/canvas-prebuilt-1.6.11.tgz",
- "integrity": "sha512-ayBAayYLgFbGBX+cwtOzM4iEQP4XB5DuBbtjgvAwQ66/FMzSR7DhlCqtDZIq9UBbpFCb1QpyDgUNVclHDdBixg==",
+ "canvas": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz",
+ "integrity": "sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA==",
"dev": true,
"requires": {
- "node-pre-gyp": "^0.10.0"
+ "nan": "^2.14.0",
+ "node-pre-gyp": "^0.11.0",
+ "simple-get": "^3.0.3"
+ },
+ "dependencies": {
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "dev": true
+ },
+ "node-pre-gyp": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
+ "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==",
+ "dev": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ }
}
},
"capture-exit": {
@@ -4003,6 +4031,15 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
+ "decompress-response": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^2.0.0"
+ }
+ },
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
@@ -7165,6 +7202,12 @@
"integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
"dev": true
},
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
"ipaddr.js": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz",
@@ -8251,6 +8294,131 @@
"jsdom": "^11.5.1"
}
},
+ "jest-environment-jsdom-fifteen": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fifteen/-/jest-environment-jsdom-fifteen-1.0.2.tgz",
+ "integrity": "sha512-nfrnAfwklE1872LIB31HcjM65cWTh1wzvMSp10IYtPJjLDUbTTvDpajZgIxUnhRmzGvogdHDayCIlerLK0OBBg==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^24.3.0",
+ "@jest/fake-timers": "^24.3.0",
+ "@jest/types": "^24.3.0",
+ "jest-mock": "^24.0.0",
+ "jest-util": "^24.0.0",
+ "jsdom": "^15.2.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
+ "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==",
+ "dev": true
+ },
+ "cssom": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
+ "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.2.0.tgz",
+ "integrity": "sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA==",
+ "dev": true,
+ "requires": {
+ "cssom": "~0.3.6"
+ },
+ "dependencies": {
+ "cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "dev": true
+ }
+ }
+ },
+ "jsdom": {
+ "version": "15.2.1",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz",
+ "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "acorn": "^7.1.0",
+ "acorn-globals": "^4.3.2",
+ "array-equal": "^1.0.0",
+ "cssom": "^0.4.1",
+ "cssstyle": "^2.0.0",
+ "data-urls": "^1.1.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.11.1",
+ "html-encoding-sniffer": "^1.0.2",
+ "nwsapi": "^2.2.0",
+ "parse5": "5.1.0",
+ "pn": "^1.1.0",
+ "request": "^2.88.0",
+ "request-promise-native": "^1.0.7",
+ "saxes": "^3.1.9",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^3.0.1",
+ "w3c-hr-time": "^1.0.1",
+ "w3c-xmlserializer": "^1.1.2",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.5",
+ "whatwg-mimetype": "^2.3.0",
+ "whatwg-url": "^7.0.0",
+ "ws": "^7.0.0",
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "nwsapi": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+ "dev": true
+ },
+ "parse5": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
+ "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
+ "dev": true,
+ "requires": {
+ "ip-regex": "^2.1.0",
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "whatwg-url": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "ws": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz",
+ "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==",
+ "dev": true
+ }
+ }
+ },
"jest-environment-node": {
"version": "24.8.0",
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz",
@@ -10200,6 +10368,12 @@
}
}
},
+ "jest-without-globals": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/jest-without-globals/-/jest-without-globals-0.0.2.tgz",
+ "integrity": "sha512-bj0gn7yJVqz8C3bvZdW6anc6K7YE1kQgFs7YuwnA6e3g+VzQc3zErIc4W2Mrx/06h1wdgBSswidVThp09of2/w==",
+ "dev": true
+ },
"jest-worker": {
"version": "24.6.0",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz",
@@ -10856,6 +11030,12 @@
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
+ "mimic-response": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+ "dev": true
+ },
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -11121,24 +11301,6 @@
"which": "^1.3.0"
}
},
- "node-pre-gyp": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
- "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
"nopt": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
@@ -13630,6 +13792,15 @@
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
},
+ "saxes": {
+ "version": "3.1.11",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
+ "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
+ "dev": true,
+ "requires": {
+ "xmlchars": "^2.1.1"
+ }
+ },
"semver": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
@@ -13791,6 +13962,23 @@
"resolved": "https://registry.npmjs.org/signature_pad/-/signature_pad-2.3.2.tgz",
"integrity": "sha512-peYXLxOsIY6MES2TrRLDiNg2T++8gGbpP2yaC+6Ohtxr+a2dzoaqWosWDY9sWqTAAk6E/TyQO+LJw9zQwyu5kA=="
},
+ "simple-concat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
+ "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
+ "dev": true
+ },
+ "simple-get": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz",
+ "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
+ "dev": true,
+ "requires": {
+ "decompress-response": "^4.2.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
"sisteransi": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.2.tgz",
@@ -15077,6 +15265,17 @@
"browser-process-hrtime": "^0.1.2"
}
},
+ "w3c-xmlserializer": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
+ "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
+ "dev": true,
+ "requires": {
+ "domexception": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "xml-name-validator": "^3.0.0"
+ }
+ },
"walker": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
@@ -15305,6 +15504,12 @@
"string-width": "^1.0.2 || 2"
}
},
+ "window-resizeto": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/window-resizeto/-/window-resizeto-0.0.2.tgz",
+ "integrity": "sha512-681jdLyc6p+Whk7lFxWISm+V49ymURtBN+Oz5j5c6UnYoBpqc2Q8e3pjZ5VtedC01TjJqr2Xt9XdJMid4KxZmQ==",
+ "dev": true
+ },
"window-size": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
@@ -15390,6 +15595,12 @@
"integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
"dev": true
},
+ "xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true
+ },
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
diff --git a/package.json b/package.json
index deac684..0049a5a 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"description": "A React wrapper component around signature_pad. Unopinionated and heavily updated fork of react-signature-pad",
"main": "build/index.js",
"files": [
- "src/index.js",
+ "src/",
"build/"
],
"author": "Anton Gilgur",
@@ -17,6 +17,9 @@
"bugs": {
"url": "https://github.com/agilgur5/react-signature-canvas/issues"
},
+ "funding": {
+ "url": "https://github.com/sponsors/agilgur5"
+ },
"keywords": [
"react",
"react-component",
@@ -38,10 +41,10 @@
"lint": "standard --parser babel-eslint",
"lint:fix": "standard --parser babel-eslint --fix",
"start": "webpack-dev-server -d --inline --hot",
- "dist": "webpack -p --config webpack.production.config.js",
+ "build": "webpack -p --config webpack.production.config.js",
"test": "jest",
- "test:pub": "npm run dist && npm pack",
- "pub": "npm run dist && npm publish",
+ "test:pub": "npm run build && npm pack",
+ "pub": "npm run build && npm publish",
"changelog": "changelog-maker"
},
"peerDependencies": {
@@ -63,16 +66,19 @@
"babel-preset-es2015": "^6.14.0",
"babel-preset-react": "^6.11.1",
"babel-preset-stage-2": "^6.13.0",
- "canvas-prebuilt": "^1.6.11",
+ "canvas": "^2.6.1",
"css-loader": "^0.24.0",
"enzyme": "^3.10.0",
"jest": "^24.8.0",
+ "jest-environment-jsdom-fifteen": "^1.0.2",
+ "jest-without-globals": "^0.0.2",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-hot-loader": "^1.2.7",
"standard": "^13.0.2",
"style-loader": "^0.13.1",
"webpack": "^1.12.2",
- "webpack-dev-server": "^1.10.1"
+ "webpack-dev-server": "^1.10.1",
+ "window-resizeto": "0.0.2"
}
}
diff --git a/src/index.js b/src/index.js
index e80ab0c..ce553ed 100644
--- a/src/index.js
+++ b/src/index.js
@@ -3,7 +3,7 @@ import React, { Component } from 'react'
import SignaturePad from 'signature_pad'
import trimCanvas from 'trim-canvas'
-export default class SignatureCanvas extends Component {
+export class SignatureCanvas extends Component {
static propTypes = {
// signature_pad's props
velocityFilterWeight: PropTypes.number,
@@ -139,3 +139,5 @@ export default class SignatureCanvas extends Component {
return this._sigPad.toData()
}
}
+
+export default SignatureCanvas
diff --git a/test-utils/jest-export.js b/test-utils/jest-export.js
deleted file mode 100644
index 37d01f5..0000000
--- a/test-utils/jest-export.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// export Jest as an ES Module (https://github.com/facebook/jest/pull/7571#issuecomment-498634094)
-/* global jest */
-export default jest
-export const { expect, test, describe, it } = global
diff --git a/test-utils/window-resizeTo.js b/test-utils/window-resizeTo.js
deleted file mode 100644
index 3366650..0000000
--- a/test-utils/window-resizeTo.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// polyfill window.resizeTo in jsdom environment
-// https://spectrum.chat/testing-library/help-react/how-to-set-window-innerwidth-to-test-mobile~70aa9572-b7cc-4397-92f5-a09d75ed24b8?m=MTU1OTU5MTI2MTI0MQ==
-window.resizeTo = function resizeTo (width, height) {
- Object.assign(window, {
- innerWidth: width,
- innerHeight: height,
- outerWidth: width,
- outerHeight: height
- }).dispatchEvent(new window.Event('resize'))
-}
diff --git a/test-utils/configure-enzyme.js b/test/config/configure-enzyme.js
similarity index 100%
rename from test-utils/configure-enzyme.js
rename to test/config/configure-enzyme.js
diff --git a/test-utils/fixtures.js b/test/fixtures.js
similarity index 100%
rename from test-utils/fixtures.js
rename to test/fixtures.js
diff --git a/src/index.spec.js b/test/index.spec.js
similarity index 97%
rename from src/index.spec.js
rename to test/index.spec.js
index 2bb58c1..f21f65c 100644
--- a/src/index.spec.js
+++ b/test/index.spec.js
@@ -1,9 +1,9 @@
-import jest, { describe, it, test, expect } from 'jest'
+import { jest, describe, it, test, expect } from 'jest-without-globals'
import { mount } from 'enzyme'
import React from 'react'
-import SignatureCanvas from './index.js'
-import { propsF, dotF } from '../test-utils/fixtures.js'
+import SignatureCanvas from '../src/index.js'
+import { propsF, dotF } from './fixtures.js'
test('mounts canvas and instance properly', () => {
const wrapper = mount()