Mirror: React hooks for accessible, common web interactions. UI super powers without the UI.

chore: Upgrade Rollup build and refactor for bundlesize savings (#10)

* Upgrade Rollup dependencies

* Update Rollup build process

* Replace husky-v4

* Update selection restoration implementation

* Simplify getFocusTargets

* Simplify focus utilities

* Simplify click helpers

* Simplify usePriority

* Remove unnecessary utility function

+15 -16
package.json
···
"version": "0.1.0",
"main": "dist/use-interactions.js",
"module": "dist/use-interactions.es.js",
-
"types": "dist/types/index.d.ts",
"source": "src/index.ts",
"sideEffects": false,
"license": "MIT",
···
"check": "tsc",
"test": "cypress run --component",
"test:open": "cypress open --component",
-
"build": "rollup -c rollup.config.js",
-
"prepublishOnly": "run-s check build"
},
"prettier": {
"singleQuote": true,
···
"*.json": "prettier --write",
"*.md": "prettier --write"
},
-
"husky": {
-
"hooks": {
-
"pre-commit": "lint-staged --quiet --relative"
-
}
-
},
"peerDependencies": {
"react": ">= 16.8.0"
},
"devDependencies": {
"@cypress/react": "^6.2.0",
"@cypress/vite-dev-server": "^3.3.1",
-
"@rollup/plugin-buble": "^0.21.3",
-
"@rollup/plugin-commonjs": "^21.0.2",
-
"@rollup/plugin-node-resolve": "^13.1.3",
"@types/react": "^17.0.42",
"cypress": "^10.10.0",
"cypress-real-events": "^1.7.2",
-
"husky-v4": "^4.3.8",
"lint-staged": "^12.3.7",
"npm-run-all": "^4.1.5",
"prettier": "^2.6.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
-
"rollup": "^2.70.1",
-
"rollup-plugin-terser": "^7.0.2",
-
"rollup-plugin-typescript2": "^0.31.2",
-
"typescript": "^4.6.2",
"vite": "^2.8.6"
}
}
···
"version": "0.1.0",
"main": "dist/use-interactions.js",
"module": "dist/use-interactions.es.js",
+
"types": "dist/use-interactions.d.ts",
"source": "src/index.ts",
"sideEffects": false,
"license": "MIT",
···
"check": "tsc",
"test": "cypress run --component",
"test:open": "cypress open --component",
+
"build": "rollup -c scripts/rollup.config.mjs",
+
"prepublishOnly": "run-s check build",
+
"prepare": "node ./scripts/prepare.js || true"
},
"prettier": {
"singleQuote": true,
···
"*.json": "prettier --write",
"*.md": "prettier --write"
},
"peerDependencies": {
"react": ">= 16.8.0"
},
"devDependencies": {
+
"@babel/core": "^7.21.8",
+
"@babel/plugin-transform-block-scoping": "^7.21.0",
+
"@babel/plugin-transform-typescript": "^7.21.3",
"@cypress/react": "^6.2.0",
"@cypress/vite-dev-server": "^3.3.1",
+
"@rollup/plugin-babel": "^6.0.3",
+
"@rollup/plugin-commonjs": "^25.0.0",
+
"@rollup/plugin-node-resolve": "^15.0.2",
+
"@rollup/plugin-terser": "^0.4.3",
"@types/react": "^17.0.42",
"cypress": "^10.10.0",
"cypress-real-events": "^1.7.2",
"lint-staged": "^12.3.7",
"npm-run-all": "^4.1.5",
"prettier": "^2.6.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
+
"rollup": "^3.23.0",
+
"rollup-plugin-cjs-check": "^1.0.2",
+
"rollup-plugin-dts": "^5.3.0",
+
"typescript": "^5.0.4",
"vite": "^2.8.6"
}
}
+529 -482
pnpm-lock.yaml
···
lockfileVersion: '6.0'
devDependencies:
'@cypress/react':
specifier: ^6.2.0
version: 6.2.0(@types/react@17.0.42)(cypress@10.10.0)(react-dom@17.0.2)(react@17.0.2)
'@cypress/vite-dev-server':
specifier: ^3.3.1
version: 3.3.1
-
'@rollup/plugin-buble':
-
specifier: ^0.21.3
-
version: 0.21.3(rollup@2.70.1)
'@rollup/plugin-commonjs':
-
specifier: ^21.0.2
-
version: 21.0.2(rollup@2.70.1)
'@rollup/plugin-node-resolve':
-
specifier: ^13.1.3
-
version: 13.1.3(rollup@2.70.1)
'@types/react':
specifier: ^17.0.42
version: 17.0.42
···
cypress-real-events:
specifier: ^1.7.2
version: 1.7.2(cypress@10.10.0)
-
husky-v4:
-
specifier: ^4.3.8
-
version: 4.3.8
lint-staged:
specifier: ^12.3.7
version: 12.3.7
···
specifier: ^17.0.2
version: 17.0.2(react@17.0.2)
rollup:
-
specifier: ^2.70.1
-
version: 2.70.1
-
rollup-plugin-terser:
-
specifier: ^7.0.2
-
version: 7.0.2(rollup@2.70.1)
-
rollup-plugin-typescript2:
-
specifier: ^0.31.2
-
version: 0.31.2(rollup@2.70.1)(typescript@4.6.2)
typescript:
-
specifier: ^4.6.2
-
version: 4.6.2
vite:
specifier: ^2.8.6
version: 2.8.6
packages:
/@babel/code-frame@7.21.4:
resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==}
engines: {node: '>=6.9.0'}
···
'@babel/highlight': 7.18.6
dev: true
/@babel/helper-validator-identifier@7.19.1:
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
engines: {node: '>=6.9.0'}
dev: true
/@babel/highlight@7.18.6:
resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
engines: {node: '>=6.9.0'}
···
js-tokens: 4.0.0
dev: true
/@colors/colors@1.5.0:
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
···
'@jridgewell/sourcemap-codec': 1.4.14
dev: true
-
/@rollup/plugin-buble@0.21.3(rollup@2.70.1):
-
resolution: {integrity: sha512-Iv8cCuFPnMdqV4pcyU+OrfjOfagPArRQ1PyQjx5KgHk3dARedI+8PNTLSMpJts0lQJr8yF2pAU4GxpxCBJ9HYw==}
-
engines: {node: '>= 8.0.0'}
peerDependencies:
-
rollup: ^1.20.0||^2.0.0
dependencies:
-
'@rollup/pluginutils': 3.1.0(rollup@2.70.1)
-
'@types/buble': 0.19.2
-
buble: 0.20.0
-
rollup: 2.70.1
dev: true
-
/@rollup/plugin-commonjs@21.0.2(rollup@2.70.1):
-
resolution: {integrity: sha512-d/OmjaLVO4j/aQX69bwpWPpbvI3TJkQuxoAk7BH8ew1PyoMBLTOuvJTjzG8oEoW7drIIqB0KCJtfFLu/2GClWg==}
-
engines: {node: '>= 8.0.0'}
peerDependencies:
-
rollup: ^2.38.3
dependencies:
-
'@rollup/pluginutils': 3.1.0(rollup@2.70.1)
commondir: 1.0.1
estree-walker: 2.0.2
-
glob: 7.2.3
is-reference: 1.2.1
-
magic-string: 0.25.9
-
resolve: 1.22.2
-
rollup: 2.70.1
dev: true
-
/@rollup/plugin-node-resolve@13.1.3(rollup@2.70.1):
-
resolution: {integrity: sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==}
-
engines: {node: '>= 10.0.0'}
peerDependencies:
-
rollup: ^2.42.0
dependencies:
-
'@rollup/pluginutils': 3.1.0(rollup@2.70.1)
-
'@types/resolve': 1.17.1
-
builtin-modules: 3.3.0
deepmerge: 4.3.1
is-module: 1.0.0
resolve: 1.22.2
-
rollup: 2.70.1
dev: true
-
/@rollup/pluginutils@3.1.0(rollup@2.70.1):
-
resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
-
engines: {node: '>= 8.0.0'}
peerDependencies:
-
rollup: ^1.20.0||^2.0.0
dependencies:
-
'@types/estree': 0.0.39
-
estree-walker: 1.0.1
-
picomatch: 2.3.1
-
rollup: 2.70.1
dev: true
-
/@rollup/pluginutils@4.2.1:
-
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
-
engines: {node: '>= 8.0.0'}
dependencies:
estree-walker: 2.0.2
picomatch: 2.3.1
-
dev: true
-
-
/@types/buble@0.19.2:
-
resolution: {integrity: sha512-uUD8zIfXMKThmFkahTXDGI3CthFH1kMg2dOm3KLi4GlC5cbARA64bEcUMbbWdWdE73eoc/iBB9PiTMqH0dNS2Q==}
-
dependencies:
-
magic-string: 0.25.9
-
dev: true
-
-
/@types/estree@0.0.39:
-
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
dev: true
/@types/estree@1.0.1:
···
resolution: {integrity: sha512-OuJi8bIng4wYHHA3YpKauL58dZrPxro3d0tabPHyiNF8rKfGKuVfr83oFlPLmKri1cX+Z3cJP39GXmnqkP11Gw==}
dev: true
-
/@types/node@20.1.5:
-
resolution: {integrity: sha512-IvGD1CD/nego63ySR7vrAKEX3AJTcmrAN2kn+/sDNLi1Ff5kBzDeEdqWDplK+0HAEoLYej137Sk0cUU8OLOlMg==}
-
dev: true
-
-
/@types/parse-json@4.0.0:
-
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
-
dev: true
-
/@types/prop-types@15.7.5:
resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
dev: true
···
csstype: 3.1.2
dev: true
-
/@types/resolve@1.17.1:
-
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
-
dependencies:
-
'@types/node': 20.1.5
dev: true
/@types/scheduler@0.16.3:
···
'@types/node': 14.18.47
dev: true
optional: true
-
-
/@yarn-tool/resolve-package@1.0.47:
-
resolution: {integrity: sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==}
-
dependencies:
-
pkg-dir: 5.0.0
-
tslib: 2.5.0
-
upath2: 3.1.19
-
dev: true
-
-
/acorn-dynamic-import@4.0.0(acorn@6.4.2):
-
resolution: {integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==}
-
deprecated: This is probably built in to whatever tool you're using. If you still need it... idk
-
peerDependencies:
-
acorn: ^6.0.0
-
dependencies:
-
acorn: 6.4.2
-
dev: true
-
-
/acorn-jsx@5.3.2(acorn@6.4.2):
-
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
-
peerDependencies:
-
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
dependencies:
-
acorn: 6.4.2
-
dev: true
-
-
/acorn@6.4.2:
-
resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==}
-
engines: {node: '>=0.4.0'}
-
hasBin: true
-
dev: true
/acorn@8.8.2:
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
···
concat-map: 0.0.1
dev: true
/braces@3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
···
fill-range: 7.0.1
dev: true
-
/buble@0.20.0:
-
resolution: {integrity: sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw==}
hasBin: true
dependencies:
-
acorn: 6.4.2
-
acorn-dynamic-import: 4.0.0(acorn@6.4.2)
-
acorn-jsx: 5.3.2(acorn@6.4.2)
-
chalk: 2.4.2
-
magic-string: 0.25.9
-
minimist: 1.2.8
-
regexpu-core: 4.5.4
dev: true
/buffer-crc32@0.2.13:
···
get-intrinsic: 1.2.1
dev: true
-
/callsites@3.1.0:
-
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
-
engines: {node: '>=6'}
dev: true
/caseless@0.12.0:
···
engines: {node: '>= 0.8.0'}
dev: true
-
/ci-info@2.0.0:
-
resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
-
dev: true
-
/ci-info@3.8.0:
resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
engines: {node: '>=8'}
dev: true
/clean-stack@2.2.0:
···
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
dev: true
-
/compare-versions@3.6.0:
-
resolution: {integrity: sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==}
-
dev: true
-
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
-
/core-util-is@1.0.2:
-
resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
dev: true
-
/cosmiconfig@7.1.0:
-
resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
-
engines: {node: '>=10'}
-
dependencies:
-
'@types/parse-json': 4.0.0
-
import-fresh: 3.3.0
-
parse-json: 5.2.0
-
path-type: 4.0.0
-
yaml: 1.10.2
dev: true
/cross-spawn@6.0.5:
···
safer-buffer: 2.1.2
dev: true
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
···
esbuild-windows-arm64: 0.14.54
dev: true
/escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
-
dev: true
-
-
/estree-walker@1.0.1:
-
resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
dev: true
/estree-walker@2.0.2:
···
to-regex-range: 5.0.1
dev: true
-
/find-cache-dir@3.3.2:
-
resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
-
engines: {node: '>=8'}
-
dependencies:
-
commondir: 1.0.1
-
make-dir: 3.1.0
-
pkg-dir: 4.2.0
-
dev: true
-
-
/find-up@4.1.0:
-
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
-
engines: {node: '>=8'}
-
dependencies:
-
locate-path: 5.0.0
-
path-exists: 4.0.0
-
dev: true
-
-
/find-up@5.0.0:
-
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
-
engines: {node: '>=10'}
-
dependencies:
-
locate-path: 6.0.0
-
path-exists: 4.0.0
-
dev: true
-
/find-up@6.3.0:
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
path-exists: 5.0.0
dev: true
-
/find-versions@4.0.0:
-
resolution: {integrity: sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==}
-
engines: {node: '>=10'}
-
dependencies:
-
semver-regex: 3.1.4
-
dev: true
-
/for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
dependencies:
···
mime-types: 2.1.35
dev: true
-
/fs-extra@10.1.0:
-
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
-
engines: {node: '>=12'}
-
dependencies:
-
graceful-fs: 4.2.11
-
jsonfile: 6.1.0
-
universalify: 2.0.0
-
dev: true
-
/fs-extra@9.1.0:
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
engines: {node: '>=10'}
···
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
dev: true
/get-intrinsic@1.2.1:
···
path-is-absolute: 1.0.1
dev: true
/global-dirs@3.0.1:
resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
engines: {node: '>=10'}
dependencies:
ini: 2.0.0
dev: true
/globalthis@1.0.3:
···
engines: {node: '>=10.17.0'}
dev: true
-
/husky-v4@4.3.8:
-
resolution: {integrity: sha512-M7A9u/t6BnT/qbDzKb7SdXhr8qLTGTkqZL6YLDDM20jfCdmpIMEuO384LvYXSBcgv50oIgNWI/IaO3g4A4ShjA==}
-
engines: {node: '>=10'}
-
hasBin: true
-
requiresBuild: true
-
dependencies:
-
chalk: 4.1.2
-
ci-info: 2.0.0
-
compare-versions: 3.6.0
-
cosmiconfig: 7.1.0
-
find-versions: 4.0.0
-
opencollective-postinstall: 2.0.3
-
pkg-dir: 5.0.0
-
please-upgrade-node: 3.2.0
-
slash: 3.0.0
-
which-pm-runs: 1.1.0
-
dev: true
-
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
dev: true
-
/import-fresh@3.3.0:
-
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
-
engines: {node: '>=6'}
-
dependencies:
-
parent-module: 1.0.1
-
resolve-from: 4.0.0
-
dev: true
-
/indent-string@4.0.0:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
···
has-tostringtag: 1.0.0
dev: true
/is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
···
ci-info: 3.8.0
dev: true
-
/is-core-module@2.12.0:
-
resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==}
dependencies:
has: 1.0.3
dev: true
···
resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
dev: true
-
/jest-worker@26.6.2:
-
resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
-
engines: {node: '>= 10.13.0'}
-
dependencies:
-
'@types/node': 20.1.5
-
merge-stream: 2.0.0
-
supports-color: 7.2.0
-
dev: true
-
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: true
···
resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
dev: true
-
/jsesc@0.5.0:
-
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
hasBin: true
dev: true
···
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
dev: true
-
/json-parse-even-better-errors@2.3.1:
-
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
-
dev: true
-
/json-schema@0.4.0:
resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
dev: true
/json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
dev: true
/jsonfile@6.1.0:
···
/lilconfig@2.0.4:
resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==}
engines: {node: '>=10'}
-
dev: true
-
-
/lines-and-columns@1.2.4:
-
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
dev: true
/lint-staged@12.3.7:
···
engines: {node: '>=14'}
dev: true
-
/locate-path@5.0.0:
-
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
-
engines: {node: '>=8'}
-
dependencies:
-
p-locate: 4.1.0
-
dev: true
-
-
/locate-path@6.0.0:
-
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
-
engines: {node: '>=10'}
-
dependencies:
-
p-locate: 5.0.0
-
dev: true
-
/locate-path@7.2.0:
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
hasBin: true
dependencies:
js-tokens: 4.0.0
dev: true
/lru-cache@6.0.0:
···
yallist: 4.0.0
dev: true
-
/magic-string@0.25.9:
-
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:
-
sourcemap-codec: 1.4.8
dev: true
-
/make-dir@3.1.0:
-
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
-
engines: {node: '>=8'}
dependencies:
-
semver: 6.3.0
dev: true
/memorystream@0.3.1:
···
brace-expansion: 1.1.11
dev: true
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: true
···
dependencies:
css-select: 4.3.0
he: 1.2.0
dev: true
/normalize-package-data@2.5.0:
···
mimic-fn: 2.1.0
dev: true
-
/opencollective-postinstall@2.0.3:
-
resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==}
-
hasBin: true
-
dev: true
-
/ospath@1.2.2:
resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==}
dev: true
-
/p-limit@2.3.0:
-
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
-
engines: {node: '>=6'}
-
dependencies:
-
p-try: 2.2.0
-
dev: true
-
-
/p-limit@3.1.0:
-
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
-
engines: {node: '>=10'}
-
dependencies:
-
yocto-queue: 0.1.0
-
dev: true
-
/p-limit@4.0.0:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
yocto-queue: 1.0.0
dev: true
-
/p-locate@4.1.0:
-
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
-
engines: {node: '>=8'}
-
dependencies:
-
p-limit: 2.3.0
-
dev: true
-
-
/p-locate@5.0.0:
-
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
-
engines: {node: '>=10'}
-
dependencies:
-
p-limit: 3.1.0
-
dev: true
-
/p-locate@6.0.0:
resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
aggregate-error: 3.1.0
dev: true
-
/p-try@2.2.0:
-
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
-
engines: {node: '>=6'}
-
dev: true
-
-
/parent-module@1.0.1:
-
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
-
engines: {node: '>=6'}
-
dependencies:
-
callsites: 3.1.0
-
dev: true
-
/parse-json@4.0.0:
resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
engines: {node: '>=4'}
···
json-parse-better-errors: 1.0.2
dev: true
-
/parse-json@5.2.0:
-
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
-
engines: {node: '>=8'}
-
dependencies:
-
'@babel/code-frame': 7.21.4
-
error-ex: 1.3.2
-
json-parse-even-better-errors: 2.3.1
-
lines-and-columns: 1.2.4
-
dev: true
-
-
/path-exists@4.0.0:
-
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
-
engines: {node: '>=8'}
-
dev: true
-
/path-exists@5.0.0:
resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
engines: {node: '>=0.10.0'}
dev: true
-
/path-is-network-drive@1.0.20:
-
resolution: {integrity: sha512-p5wCWlRB4+ggzxWshqHH9aF3kAuVu295NaENXmVhThbZPJQBeJdxZTP6CIoUR+kWHDUW56S9YcaO1gXnc/BOxw==}
-
dependencies:
-
tslib: 2.5.0
-
dev: true
-
/path-key@2.0.1:
resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
engines: {node: '>=4'}
···
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
-
/path-strip-sep@1.0.17:
-
resolution: {integrity: sha512-+2zIC2fNgdilgV7pTrktY6oOxxZUo9x5zJYfTzxsGze5kSGDDwhA5/0WlBn+sUyv/WuuyYn3OfM+Ue5nhdQUgA==}
-
dependencies:
-
tslib: 2.5.0
-
dev: true
-
/path-type@3.0.0:
resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
engines: {node: '>=4'}
dependencies:
pify: 3.0.0
-
dev: true
-
-
/path-type@4.0.0:
-
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
-
engines: {node: '>=8'}
dev: true
/pathe@0.2.0:
···
/pify@3.0.0:
resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
engines: {node: '>=4'}
-
dev: true
-
-
/pkg-dir@4.2.0:
-
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
-
engines: {node: '>=8'}
-
dependencies:
-
find-up: 4.1.0
-
dev: true
-
-
/pkg-dir@5.0.0:
-
resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==}
-
engines: {node: '>=10'}
-
dependencies:
-
find-up: 5.0.0
-
dev: true
-
-
/please-upgrade-node@3.2.0:
-
resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==}
-
dependencies:
-
semver-compare: 1.0.0
dev: true
/postcss@8.4.23:
···
path-type: 3.0.0
dev: true
-
/regenerate-unicode-properties@8.2.0:
-
resolution: {integrity: sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==}
-
engines: {node: '>=4'}
-
dependencies:
-
regenerate: 1.4.2
-
dev: true
-
-
/regenerate@1.4.2:
-
resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
-
dev: true
-
/regexp.prototype.flags@1.5.0:
resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
engines: {node: '>= 0.4'}
···
functions-have-names: 1.2.3
dev: true
-
/regexpu-core@4.5.4:
-
resolution: {integrity: sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==}
-
engines: {node: '>=4'}
-
dependencies:
-
regenerate: 1.4.2
-
regenerate-unicode-properties: 8.2.0
-
regjsgen: 0.5.2
-
regjsparser: 0.6.9
-
unicode-match-property-ecmascript: 1.0.4
-
unicode-match-property-value-ecmascript: 1.2.0
-
dev: true
-
-
/regjsgen@0.5.2:
-
resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==}
-
dev: true
-
-
/regjsparser@0.6.9:
-
resolution: {integrity: sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==}
-
hasBin: true
-
dependencies:
-
jsesc: 0.5.0
-
dev: true
-
/request-progress@3.0.0:
resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==}
dependencies:
throttleit: 1.0.0
dev: true
-
/resolve-from@4.0.0:
-
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
-
engines: {node: '>=4'}
-
dev: true
-
/resolve@1.22.2:
resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
hasBin: true
dependencies:
-
is-core-module: 2.12.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
···
glob: 7.2.3
dev: true
-
/rollup-plugin-terser@7.0.2(rollup@2.70.1):
-
resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
-
deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser
peerDependencies:
-
rollup: ^2.0.0
dependencies:
-
'@babel/code-frame': 7.21.4
-
jest-worker: 26.6.2
-
rollup: 2.70.1
-
serialize-javascript: 4.0.0
-
terser: 5.17.4
dev: true
-
/rollup-plugin-typescript2@0.31.2(rollup@2.70.1)(typescript@4.6.2):
-
resolution: {integrity: sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==}
peerDependencies:
-
rollup: '>=1.26.3'
-
typescript: '>=2.4.0'
dependencies:
-
'@rollup/pluginutils': 4.2.1
-
'@yarn-tool/resolve-package': 1.0.47
-
find-cache-dir: 3.3.2
-
fs-extra: 10.1.0
-
resolve: 1.22.2
-
rollup: 2.70.1
-
tslib: 2.5.0
-
typescript: 4.6.2
dev: true
-
/rollup@2.70.1:
-
resolution: {integrity: sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==}
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
/rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
dependencies:
-
tslib: 2.5.0
dev: true
/safe-buffer@5.2.1:
···
object-assign: 4.1.1
dev: true
-
/semver-compare@1.0.0:
-
resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
-
dev: true
-
-
/semver-regex@3.1.4:
-
resolution: {integrity: sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==}
-
engines: {node: '>=8'}
-
dev: true
-
/semver@5.7.1:
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
hasBin: true
···
lru-cache: 6.0.0
dev: true
-
/serialize-javascript@4.0.0:
-
resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
dependencies:
randombytes: 2.1.0
dev: true
···
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: true
-
/slash@3.0.0:
-
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
-
engines: {node: '>=8'}
-
dev: true
-
/slice-ansi@3.0.0:
resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
engines: {node: '>=8'}
···
is-fullwidth-code-point: 4.0.0
dev: true
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
···
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
-
dev: true
-
-
/sourcemap-codec@1.4.8:
-
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
-
deprecated: Please use @jridgewell/sourcemap-codec instead
dev: true
/spdx-correct@3.2.0:
···
engines: {node: '>= 0.4'}
dev: true
-
/terser@5.17.4:
-
resolution: {integrity: sha512-jcEKZw6UPrgugz/0Tuk/PVyLAPfMBJf5clnGueo45wTweoV8yh7Q7PEkhkJ5uuUbC7zAxEcG3tqNr1bstkQ8nw==}
engines: {node: '>=10'}
hasBin: true
dependencies:
···
engines: {node: '>=8.17.0'}
dependencies:
rimraf: 3.0.2
dev: true
/to-regex-range@5.0.1:
···
punycode: 2.3.0
dev: true
-
/tslib@2.5.0:
-
resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
dev: true
/tunnel-agent@0.6.0:
···
is-typed-array: 1.1.10
dev: true
-
/typescript@4.6.2:
-
resolution: {integrity: sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==}
-
engines: {node: '>=4.2.0'}
hasBin: true
dev: true
···
which-boxed-primitive: 1.0.2
dev: true
-
/unicode-canonical-property-names-ecmascript@1.0.4:
-
resolution: {integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==}
-
engines: {node: '>=4'}
-
dev: true
-
-
/unicode-match-property-ecmascript@1.0.4:
-
resolution: {integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==}
-
engines: {node: '>=4'}
-
dependencies:
-
unicode-canonical-property-names-ecmascript: 1.0.4
-
unicode-property-aliases-ecmascript: 1.1.0
-
dev: true
-
-
/unicode-match-property-value-ecmascript@1.2.0:
-
resolution: {integrity: sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==}
-
engines: {node: '>=4'}
-
dev: true
-
-
/unicode-property-aliases-ecmascript@1.1.0:
-
resolution: {integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==}
-
engines: {node: '>=4'}
-
dev: true
-
/universalify@2.0.0:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
···
engines: {node: '>=8'}
dev: true
-
/upath2@3.1.19:
-
resolution: {integrity: sha512-d23dQLi8nDWSRTIQwXtaYqMrHuca0As53fNiTLLFDmsGBbepsZepISaB2H1x45bDFN/n3Qw9bydvyZEacTrEWQ==}
dependencies:
-
'@types/node': 20.1.5
-
path-is-network-drive: 1.0.20
-
path-strip-sep: 1.0.17
-
tslib: 2.5.0
dev: true
/uuid@8.3.2:
···
esbuild: 0.14.54
postcss: 8.4.23
resolve: 1.22.2
-
rollup: 2.70.1
optionalDependencies:
fsevents: 2.3.2
dev: true
···
is-number-object: 1.0.7
is-string: 1.0.7
is-symbol: 1.0.4
-
dev: true
-
-
/which-pm-runs@1.1.0:
-
resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==}
-
engines: {node: '>=4'}
dev: true
/which-typed-array@1.1.9:
···
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
···
dependencies:
buffer-crc32: 0.2.13
fd-slicer: 1.1.0
-
dev: true
-
-
/yocto-queue@0.1.0:
-
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
-
engines: {node: '>=10'}
dev: true
/yocto-queue@1.0.0:
···
lockfileVersion: '6.0'
devDependencies:
+
'@babel/core':
+
specifier: ^7.21.8
+
version: 7.21.8
+
'@babel/plugin-transform-block-scoping':
+
specifier: ^7.21.0
+
version: 7.21.0(@babel/core@7.21.8)
+
'@babel/plugin-transform-typescript':
+
specifier: ^7.21.3
+
version: 7.21.3(@babel/core@7.21.8)
'@cypress/react':
specifier: ^6.2.0
version: 6.2.0(@types/react@17.0.42)(cypress@10.10.0)(react-dom@17.0.2)(react@17.0.2)
'@cypress/vite-dev-server':
specifier: ^3.3.1
version: 3.3.1
+
'@rollup/plugin-babel':
+
specifier: ^6.0.3
+
version: 6.0.3(@babel/core@7.21.8)(rollup@3.23.0)
'@rollup/plugin-commonjs':
+
specifier: ^25.0.0
+
version: 25.0.0(rollup@3.23.0)
'@rollup/plugin-node-resolve':
+
specifier: ^15.0.2
+
version: 15.0.2(rollup@3.23.0)
+
'@rollup/plugin-terser':
+
specifier: ^0.4.3
+
version: 0.4.3(rollup@3.23.0)
'@types/react':
specifier: ^17.0.42
version: 17.0.42
···
cypress-real-events:
specifier: ^1.7.2
version: 1.7.2(cypress@10.10.0)
lint-staged:
specifier: ^12.3.7
version: 12.3.7
···
specifier: ^17.0.2
version: 17.0.2(react@17.0.2)
rollup:
+
specifier: ^3.23.0
+
version: 3.23.0
+
rollup-plugin-cjs-check:
+
specifier: ^1.0.2
+
version: 1.0.2(rollup@3.23.0)
+
rollup-plugin-dts:
+
specifier: ^5.3.0
+
version: 5.3.0(rollup@3.23.0)(typescript@5.0.4)
typescript:
+
specifier: ^5.0.4
+
version: 5.0.4
vite:
specifier: ^2.8.6
version: 2.8.6
packages:
+
/@ampproject/remapping@2.2.1:
+
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
+
engines: {node: '>=6.0.0'}
+
dependencies:
+
'@jridgewell/gen-mapping': 0.3.3
+
'@jridgewell/trace-mapping': 0.3.18
+
dev: true
+
/@babel/code-frame@7.21.4:
resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==}
engines: {node: '>=6.9.0'}
···
'@babel/highlight': 7.18.6
dev: true
+
/@babel/compat-data@7.21.9:
+
resolution: {integrity: sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==}
+
engines: {node: '>=6.9.0'}
+
dev: true
+
+
/@babel/core@7.21.8:
+
resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@ampproject/remapping': 2.2.1
+
'@babel/code-frame': 7.21.4
+
'@babel/generator': 7.21.9
+
'@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8)
+
'@babel/helper-module-transforms': 7.21.5
+
'@babel/helpers': 7.21.5
+
'@babel/parser': 7.21.9
+
'@babel/template': 7.21.9
+
'@babel/traverse': 7.21.5
+
'@babel/types': 7.21.5
+
convert-source-map: 1.9.0
+
debug: 4.3.4(supports-color@9.3.1)
+
gensync: 1.0.0-beta.2
+
json5: 2.2.3
+
semver: 6.3.0
+
transitivePeerDependencies:
+
- supports-color
+
dev: true
+
+
/@babel/generator@7.21.9:
+
resolution: {integrity: sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/types': 7.21.5
+
'@jridgewell/gen-mapping': 0.3.3
+
'@jridgewell/trace-mapping': 0.3.18
+
jsesc: 2.5.2
+
dev: true
+
+
/@babel/helper-annotate-as-pure@7.18.6:
+
resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.8):
+
resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0
+
dependencies:
+
'@babel/compat-data': 7.21.9
+
'@babel/core': 7.21.8
+
'@babel/helper-validator-option': 7.21.0
+
browserslist: 4.21.5
+
lru-cache: 5.1.1
+
semver: 6.3.0
+
dev: true
+
+
/@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.21.8):
+
resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0
+
dependencies:
+
'@babel/core': 7.21.8
+
'@babel/helper-annotate-as-pure': 7.18.6
+
'@babel/helper-environment-visitor': 7.21.5
+
'@babel/helper-function-name': 7.21.0
+
'@babel/helper-member-expression-to-functions': 7.21.5
+
'@babel/helper-optimise-call-expression': 7.18.6
+
'@babel/helper-replace-supers': 7.21.5
+
'@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+
'@babel/helper-split-export-declaration': 7.18.6
+
semver: 6.3.0
+
transitivePeerDependencies:
+
- supports-color
+
dev: true
+
+
/@babel/helper-environment-visitor@7.21.5:
+
resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==}
+
engines: {node: '>=6.9.0'}
+
dev: true
+
+
/@babel/helper-function-name@7.21.0:
+
resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/template': 7.21.9
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/helper-hoist-variables@7.18.6:
+
resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/helper-member-expression-to-functions@7.21.5:
+
resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/helper-module-imports@7.21.4:
+
resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/helper-module-transforms@7.21.5:
+
resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/helper-environment-visitor': 7.21.5
+
'@babel/helper-module-imports': 7.21.4
+
'@babel/helper-simple-access': 7.21.5
+
'@babel/helper-split-export-declaration': 7.18.6
+
'@babel/helper-validator-identifier': 7.19.1
+
'@babel/template': 7.21.9
+
'@babel/traverse': 7.21.5
+
'@babel/types': 7.21.5
+
transitivePeerDependencies:
+
- supports-color
+
dev: true
+
+
/@babel/helper-optimise-call-expression@7.18.6:
+
resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/helper-plugin-utils@7.21.5:
+
resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==}
+
engines: {node: '>=6.9.0'}
+
dev: true
+
+
/@babel/helper-replace-supers@7.21.5:
+
resolution: {integrity: sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/helper-environment-visitor': 7.21.5
+
'@babel/helper-member-expression-to-functions': 7.21.5
+
'@babel/helper-optimise-call-expression': 7.18.6
+
'@babel/template': 7.21.9
+
'@babel/traverse': 7.21.5
+
'@babel/types': 7.21.5
+
transitivePeerDependencies:
+
- supports-color
+
dev: true
+
+
/@babel/helper-simple-access@7.21.5:
+
resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/helper-skip-transparent-expression-wrappers@7.20.0:
+
resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/helper-split-export-declaration@7.18.6:
+
resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/helper-string-parser@7.21.5:
+
resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==}
+
engines: {node: '>=6.9.0'}
+
dev: true
+
/@babel/helper-validator-identifier@7.19.1:
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
engines: {node: '>=6.9.0'}
dev: true
+
/@babel/helper-validator-option@7.21.0:
+
resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
+
engines: {node: '>=6.9.0'}
+
dev: true
+
+
/@babel/helpers@7.21.5:
+
resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/template': 7.21.9
+
'@babel/traverse': 7.21.5
+
'@babel/types': 7.21.5
+
transitivePeerDependencies:
+
- supports-color
+
dev: true
+
/@babel/highlight@7.18.6:
resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
engines: {node: '>=6.9.0'}
···
js-tokens: 4.0.0
dev: true
+
/@babel/parser@7.21.9:
+
resolution: {integrity: sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==}
+
engines: {node: '>=6.0.0'}
+
hasBin: true
+
dependencies:
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.8):
+
resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0-0
+
dependencies:
+
'@babel/core': 7.21.8
+
'@babel/helper-plugin-utils': 7.21.5
+
dev: true
+
+
/@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.8):
+
resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0-0
+
dependencies:
+
'@babel/core': 7.21.8
+
'@babel/helper-plugin-utils': 7.21.5
+
dev: true
+
+
/@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.8):
+
resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0-0
+
dependencies:
+
'@babel/core': 7.21.8
+
'@babel/helper-annotate-as-pure': 7.18.6
+
'@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8)
+
'@babel/helper-plugin-utils': 7.21.5
+
'@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8)
+
transitivePeerDependencies:
+
- supports-color
+
dev: true
+
+
/@babel/template@7.21.9:
+
resolution: {integrity: sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/code-frame': 7.21.4
+
'@babel/parser': 7.21.9
+
'@babel/types': 7.21.5
+
dev: true
+
+
/@babel/traverse@7.21.5:
+
resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/code-frame': 7.21.4
+
'@babel/generator': 7.21.9
+
'@babel/helper-environment-visitor': 7.21.5
+
'@babel/helper-function-name': 7.21.0
+
'@babel/helper-hoist-variables': 7.18.6
+
'@babel/helper-split-export-declaration': 7.18.6
+
'@babel/parser': 7.21.9
+
'@babel/types': 7.21.5
+
debug: 4.3.4(supports-color@9.3.1)
+
globals: 11.12.0
+
transitivePeerDependencies:
+
- supports-color
+
dev: true
+
+
/@babel/types@7.21.5:
+
resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==}
+
engines: {node: '>=6.9.0'}
+
dependencies:
+
'@babel/helper-string-parser': 7.21.5
+
'@babel/helper-validator-identifier': 7.19.1
+
to-fast-properties: 2.0.0
+
dev: true
+
/@colors/colors@1.5.0:
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
···
'@jridgewell/sourcemap-codec': 1.4.14
dev: true
+
/@rollup/plugin-babel@6.0.3(@babel/core@7.21.8)(rollup@3.23.0):
+
resolution: {integrity: sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==}
+
engines: {node: '>=14.0.0'}
peerDependencies:
+
'@babel/core': ^7.0.0
+
'@types/babel__core': ^7.1.9
+
rollup: ^1.20.0||^2.0.0||^3.0.0
+
peerDependenciesMeta:
+
'@types/babel__core':
+
optional: true
+
rollup:
+
optional: true
dependencies:
+
'@babel/core': 7.21.8
+
'@babel/helper-module-imports': 7.21.4
+
'@rollup/pluginutils': 5.0.2(rollup@3.23.0)
+
rollup: 3.23.0
dev: true
+
/@rollup/plugin-commonjs@25.0.0(rollup@3.23.0):
+
resolution: {integrity: sha512-hoho2Kay9TZrLu0bnDsTTCaj4Npa+THk9snajP/XDNb9a9mmjTjh52EQM9sKl3HD1LsnihX7js+eA2sd2uKAhw==}
+
engines: {node: '>=14.0.0'}
peerDependencies:
+
rollup: ^2.68.0||^3.0.0
+
peerDependenciesMeta:
+
rollup:
+
optional: true
dependencies:
+
'@rollup/pluginutils': 5.0.2(rollup@3.23.0)
commondir: 1.0.1
estree-walker: 2.0.2
+
glob: 8.1.0
is-reference: 1.2.1
+
magic-string: 0.27.0
+
rollup: 3.23.0
dev: true
+
/@rollup/plugin-node-resolve@15.0.2(rollup@3.23.0):
+
resolution: {integrity: sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==}
+
engines: {node: '>=14.0.0'}
peerDependencies:
+
rollup: ^2.78.0||^3.0.0
+
peerDependenciesMeta:
+
rollup:
+
optional: true
dependencies:
+
'@rollup/pluginutils': 5.0.2(rollup@3.23.0)
+
'@types/resolve': 1.20.2
deepmerge: 4.3.1
+
is-builtin-module: 3.2.1
is-module: 1.0.0
resolve: 1.22.2
+
rollup: 3.23.0
dev: true
+
/@rollup/plugin-terser@0.4.3(rollup@3.23.0):
+
resolution: {integrity: sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==}
+
engines: {node: '>=14.0.0'}
peerDependencies:
+
rollup: ^2.x || ^3.x
+
peerDependenciesMeta:
+
rollup:
+
optional: true
dependencies:
+
rollup: 3.23.0
+
serialize-javascript: 6.0.1
+
smob: 1.1.1
+
terser: 5.17.6
dev: true
+
/@rollup/pluginutils@5.0.2(rollup@3.23.0):
+
resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
+
engines: {node: '>=14.0.0'}
+
peerDependencies:
+
rollup: ^1.20.0||^2.0.0||^3.0.0
+
peerDependenciesMeta:
+
rollup:
+
optional: true
dependencies:
+
'@types/estree': 1.0.1
estree-walker: 2.0.2
picomatch: 2.3.1
+
rollup: 3.23.0
dev: true
/@types/estree@1.0.1:
···
resolution: {integrity: sha512-OuJi8bIng4wYHHA3YpKauL58dZrPxro3d0tabPHyiNF8rKfGKuVfr83oFlPLmKri1cX+Z3cJP39GXmnqkP11Gw==}
dev: true
/@types/prop-types@15.7.5:
resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
dev: true
···
csstype: 3.1.2
dev: true
+
/@types/resolve@1.20.2:
+
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
dev: true
/@types/scheduler@0.16.3:
···
'@types/node': 14.18.47
dev: true
optional: true
/acorn@8.8.2:
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
···
concat-map: 0.0.1
dev: true
+
/brace-expansion@2.0.1:
+
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
dependencies:
+
balanced-match: 1.0.2
+
dev: true
+
/braces@3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
···
fill-range: 7.0.1
dev: true
+
/browserslist@4.21.5:
+
resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
+
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
+
caniuse-lite: 1.0.30001489
+
electron-to-chromium: 1.4.408
+
node-releases: 2.0.12
+
update-browserslist-db: 1.0.11(browserslist@4.21.5)
dev: true
/buffer-crc32@0.2.13:
···
get-intrinsic: 1.2.1
dev: true
+
/caniuse-lite@1.0.30001489:
+
resolution: {integrity: sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==}
dev: true
/caseless@0.12.0:
···
engines: {node: '>= 0.8.0'}
dev: true
/ci-info@3.8.0:
resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
engines: {node: '>=8'}
+
dev: true
+
+
/cjs-module-lexer@1.2.2:
+
resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==}
dev: true
/clean-stack@2.2.0:
···
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
dev: true
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
+
/convert-source-map@1.9.0:
+
resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
dev: true
+
/core-util-is@1.0.2:
+
resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
dev: true
/cross-spawn@6.0.5:
···
safer-buffer: 2.1.2
dev: true
+
/electron-to-chromium@1.4.408:
+
resolution: {integrity: sha512-vjeaj0u/UYnzA/CIdGXzzcxRLCqRwREYc9YfaWInjIEr7/XPttZ6ShpyqapchEy0S2r6LpLjDBTnNj7ZxnxJKg==}
+
dev: true
+
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
···
esbuild-windows-arm64: 0.14.54
dev: true
+
/escalade@3.1.1:
+
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+
engines: {node: '>=6'}
+
dev: true
+
/escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
dev: true
/estree-walker@2.0.2:
···
to-regex-range: 5.0.1
dev: true
/find-up@6.3.0:
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
path-exists: 5.0.0
dev: true
/for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
dependencies:
···
mime-types: 2.1.35
dev: true
/fs-extra@9.1.0:
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
engines: {node: '>=10'}
···
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
dev: true
+
+
/gensync@1.0.0-beta.2:
+
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+
engines: {node: '>=6.9.0'}
dev: true
/get-intrinsic@1.2.1:
···
path-is-absolute: 1.0.1
dev: true
+
/glob@8.1.0:
+
resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+
engines: {node: '>=12'}
+
dependencies:
+
fs.realpath: 1.0.0
+
inflight: 1.0.6
+
inherits: 2.0.4
+
minimatch: 5.1.6
+
once: 1.4.0
+
dev: true
+
/global-dirs@3.0.1:
resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
engines: {node: '>=10'}
dependencies:
ini: 2.0.0
+
dev: true
+
+
/globals@11.12.0:
+
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+
engines: {node: '>=4'}
dev: true
/globalthis@1.0.3:
···
engines: {node: '>=10.17.0'}
dev: true
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
dev: true
/indent-string@4.0.0:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
···
has-tostringtag: 1.0.0
dev: true
+
/is-builtin-module@3.2.1:
+
resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
+
engines: {node: '>=6'}
+
dependencies:
+
builtin-modules: 3.3.0
+
dev: true
+
/is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
···
ci-info: 3.8.0
dev: true
+
/is-core-module@2.12.1:
+
resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==}
dependencies:
has: 1.0.3
dev: true
···
resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
dev: true
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: true
···
resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
dev: true
+
/jsesc@2.5.2:
+
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+
engines: {node: '>=4'}
hasBin: true
dev: true
···
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
dev: true
/json-schema@0.4.0:
resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
dev: true
/json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
dev: true
+
+
/json5@2.2.3:
+
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+
engines: {node: '>=6'}
+
hasBin: true
dev: true
/jsonfile@6.1.0:
···
/lilconfig@2.0.4:
resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==}
engines: {node: '>=10'}
dev: true
/lint-staged@12.3.7:
···
engines: {node: '>=14'}
dev: true
/locate-path@7.2.0:
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
hasBin: true
dependencies:
js-tokens: 4.0.0
+
dev: true
+
+
/lru-cache@5.1.1:
+
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
dependencies:
+
yallist: 3.1.1
dev: true
/lru-cache@6.0.0:
···
yallist: 4.0.0
dev: true
+
/magic-string@0.27.0:
+
resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
+
engines: {node: '>=12'}
dependencies:
+
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
+
/magic-string@0.30.0:
+
resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
+
engines: {node: '>=12'}
dependencies:
+
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
/memorystream@0.3.1:
···
brace-expansion: 1.1.11
dev: true
+
/minimatch@5.1.6:
+
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+
engines: {node: '>=10'}
+
dependencies:
+
brace-expansion: 2.0.1
+
dev: true
+
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: true
···
dependencies:
css-select: 4.3.0
he: 1.2.0
+
dev: true
+
+
/node-releases@2.0.12:
+
resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==}
dev: true
/normalize-package-data@2.5.0:
···
mimic-fn: 2.1.0
dev: true
/ospath@1.2.2:
resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==}
dev: true
/p-limit@4.0.0:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
yocto-queue: 1.0.0
dev: true
/p-locate@6.0.0:
resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
aggregate-error: 3.1.0
dev: true
/parse-json@4.0.0:
resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
engines: {node: '>=4'}
···
json-parse-better-errors: 1.0.2
dev: true
/path-exists@5.0.0:
resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
···
engines: {node: '>=0.10.0'}
dev: true
/path-key@2.0.1:
resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
engines: {node: '>=4'}
···
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
/path-type@3.0.0:
resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
engines: {node: '>=4'}
dependencies:
pify: 3.0.0
dev: true
/pathe@0.2.0:
···
/pify@3.0.0:
resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
engines: {node: '>=4'}
dev: true
/postcss@8.4.23:
···
path-type: 3.0.0
dev: true
/regexp.prototype.flags@1.5.0:
resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
engines: {node: '>= 0.4'}
···
functions-have-names: 1.2.3
dev: true
/request-progress@3.0.0:
resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==}
dependencies:
throttleit: 1.0.0
dev: true
/resolve@1.22.2:
resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
hasBin: true
dependencies:
+
is-core-module: 2.12.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
···
glob: 7.2.3
dev: true
+
/rollup-plugin-cjs-check@1.0.2(rollup@3.23.0):
+
resolution: {integrity: sha512-q5DuMiYTXoMlLIHeTDdTYQrN+v/AdjEyVZnfkdvX1NnS4jQP1fwSuOr29WS4pB/4lnF1D7Annp62/27aZUyTyQ==}
+
engines: {node: '>=14.0.0'}
peerDependencies:
+
rollup: ^1.20.0 || ^2.0.0 || ^3.0.0
dependencies:
+
'@rollup/pluginutils': 5.0.2(rollup@3.23.0)
+
cjs-module-lexer: 1.2.2
+
rollup: 3.23.0
dev: true
+
/rollup-plugin-dts@5.3.0(rollup@3.23.0)(typescript@5.0.4):
+
resolution: {integrity: sha512-8FXp0ZkyZj1iU5klkIJYLjIq/YZSwBoERu33QBDxm/1yw5UU4txrEtcmMkrq+ZiKu3Q4qvPCNqc3ovX6rjqzbQ==}
+
engines: {node: '>=v14'}
peerDependencies:
+
rollup: ^3.0.0
+
typescript: ^4.1 || ^5.0
dependencies:
+
magic-string: 0.30.0
+
rollup: 3.23.0
+
typescript: 5.0.4
+
optionalDependencies:
+
'@babel/code-frame': 7.21.4
dev: true
+
/rollup@2.79.1:
+
resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
+
/rollup@3.23.0:
+
resolution: {integrity: sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==}
+
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+
hasBin: true
+
optionalDependencies:
+
fsevents: 2.3.2
+
dev: true
+
/rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
dependencies:
+
tslib: 2.5.2
dev: true
/safe-buffer@5.2.1:
···
object-assign: 4.1.1
dev: true
/semver@5.7.1:
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
hasBin: true
···
lru-cache: 6.0.0
dev: true
+
/serialize-javascript@6.0.1:
+
resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
dependencies:
randombytes: 2.1.0
dev: true
···
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: true
/slice-ansi@3.0.0:
resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
engines: {node: '>=8'}
···
is-fullwidth-code-point: 4.0.0
dev: true
+
/smob@1.1.1:
+
resolution: {integrity: sha512-i5aqEBPnDv9d77+NDxfjROtywxzNdAVNyaOr+RsLhM28Ts+Ar7luIp/Q+SBYa6wv/7BBcOpEkrhtDxsl2WA9Jg==}
+
dev: true
+
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
···
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
dev: true
/spdx-correct@3.2.0:
···
engines: {node: '>= 0.4'}
dev: true
+
/terser@5.17.6:
+
resolution: {integrity: sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==}
engines: {node: '>=10'}
hasBin: true
dependencies:
···
engines: {node: '>=8.17.0'}
dependencies:
rimraf: 3.0.2
+
dev: true
+
+
/to-fast-properties@2.0.0:
+
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+
engines: {node: '>=4'}
dev: true
/to-regex-range@5.0.1:
···
punycode: 2.3.0
dev: true
+
/tslib@2.5.2:
+
resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==}
dev: true
/tunnel-agent@0.6.0:
···
is-typed-array: 1.1.10
dev: true
+
/typescript@5.0.4:
+
resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==}
+
engines: {node: '>=12.20'}
hasBin: true
dev: true
···
which-boxed-primitive: 1.0.2
dev: true
/universalify@2.0.0:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
···
engines: {node: '>=8'}
dev: true
+
/update-browserslist-db@1.0.11(browserslist@4.21.5):
+
resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
+
hasBin: true
+
peerDependencies:
+
browserslist: '>= 4.21.0'
dependencies:
+
browserslist: 4.21.5
+
escalade: 3.1.1
+
picocolors: 1.0.0
dev: true
/uuid@8.3.2:
···
esbuild: 0.14.54
postcss: 8.4.23
resolve: 1.22.2
+
rollup: 2.79.1
optionalDependencies:
fsevents: 2.3.2
dev: true
···
is-number-object: 1.0.7
is-string: 1.0.7
is-symbol: 1.0.4
dev: true
/which-typed-array@1.1.9:
···
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
+
/yallist@3.1.1:
+
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
dev: true
+
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
···
dependencies:
buffer-crc32: 0.2.13
fd-slicer: 1.1.0
dev: true
/yocto-queue@1.0.0:
+12
scripts/prepare.js
···
···
+
const path = require('path');
+
const fs = require('fs');
+
+
const precommit = path.resolve(__dirname, '../.git/hooks/pre-commit');
+
+
const hook = `
+
#!/bin/sh
+
pnpm exec lint-staged --quiet --relative
+
`.trim();
+
+
fs.writeFileSync(precommit, hook);
+
fs.chmodSync(precommit, '755');
+183
scripts/rollup.config.mjs
···
···
+
import { readFileSync } from 'fs';
+
import * as path from 'path';
+
+
import commonjs from '@rollup/plugin-commonjs';
+
import resolve from '@rollup/plugin-node-resolve';
+
import terser from '@rollup/plugin-terser';
+
import babel from '@rollup/plugin-babel';
+
import cjsCheck from 'rollup-plugin-cjs-check';
+
import dts from 'rollup-plugin-dts';
+
+
const cwd = process.cwd();
+
const pkg = JSON.parse(readFileSync(path.resolve(cwd, './package.json'), 'utf-8'));
+
+
export const externalModules = ['dns', 'fs', 'path', 'url'];
+
if (pkg.peerDependencies)
+
externalModules.push(...Object.keys(pkg.peerDependencies));
+
if (pkg.dependencies) externalModules.push(...Object.keys(pkg.dependencies));
+
+
const externalPredicate = new RegExp(`^(${externalModules.join('|')})($|/)`);
+
+
const terserPretty = terser({
+
warnings: true,
+
ecma: 2015,
+
keep_fnames: true,
+
ie8: false,
+
compress: {
+
pure_getters: true,
+
toplevel: true,
+
booleans_as_integers: false,
+
keep_fnames: true,
+
keep_fargs: true,
+
if_return: false,
+
ie8: false,
+
sequences: false,
+
loops: false,
+
conditionals: false,
+
join_vars: false
+
},
+
mangle: {
+
module: true,
+
keep_fnames: true,
+
},
+
output: {
+
comments: false,
+
beautify: true,
+
braces: true,
+
indent_level: 2
+
}
+
});
+
+
const terserMinified = terser({
+
warnings: true,
+
ecma: 2015,
+
ie8: false,
+
toplevel: true,
+
compress: {
+
keep_infinity: true,
+
pure_getters: true,
+
passes: 10
+
},
+
mangle: {
+
module: true,
+
},
+
output: {
+
comments: false
+
}
+
});
+
+
const commonPlugins = [
+
resolve({
+
extensions: ['.mjs', '.js', '.ts'],
+
mainFields: ['module', 'jsnext', 'main'],
+
preferBuiltins: false,
+
browser: true,
+
}),
+
+
commonjs({
+
ignoreGlobal: true,
+
include: /\/node_modules\//,
+
extensions: ['.mjs', '.js', '.ts'],
+
}),
+
];
+
+
const output = ({ format, isProduction }) => {
+
if (typeof isProduction !== 'boolean')
+
throw new Error('Invalid option `isProduction` at output({ ... })');
+
if (format !== 'cjs' && format !== 'esm')
+
throw new Error('Invalid option `format` at output({ ... })');
+
+
let extension = format === 'esm'
+
? '.es.js'
+
: '.js';
+
if (isProduction) {
+
extension = '.min' + extension;
+
}
+
+
return {
+
entryFileNames: `[name]${extension}`,
+
dir: './dist',
+
exports: 'named',
+
sourcemap: true,
+
sourcemapExcludeSources: false,
+
hoistTransitiveImports: false,
+
indent: false,
+
freeze: false,
+
strict: false,
+
format,
+
plugins: [
+
cjsCheck({ extension }),
+
isProduction ? terserMinified : terserPretty,
+
],
+
// NOTE: All below settings are important for cjs-module-lexer to detect the export
+
// When this changes (and terser mangles the output) this will interfere with Node.js ESM intercompatibility
+
esModule: format !== 'esm',
+
externalLiveBindings: format !== 'esm',
+
generatedCode: {
+
preset: 'es5',
+
reservedNamesAsProps: false,
+
objectShorthand: false,
+
constBindings: false,
+
},
+
};
+
};
+
+
const commonConfig = {
+
input: {
+
'use-interactions': './src/index.ts',
+
},
+
external(id) {
+
return externalPredicate.test(id);
+
},
+
onwarn() {},
+
treeshake: {
+
unknownGlobalSideEffects: false,
+
tryCatchDeoptimization: false,
+
moduleSideEffects: false,
+
},
+
};
+
+
export default [
+
{
+
...commonConfig,
+
plugins: [
+
...commonPlugins,
+
babel({
+
babelrc: false,
+
babelHelpers: 'bundled',
+
extensions: ['js', 'jsx', 'ts', 'tsx'],
+
exclude: 'node_modules/**',
+
presets: [],
+
plugins: [
+
'@babel/plugin-transform-typescript',
+
'@babel/plugin-transform-block-scoping',
+
],
+
}),
+
],
+
output: [
+
output({ format: 'cjs', isProduction: false }),
+
output({ format: 'esm', isProduction: false }),
+
output({ format: 'cjs', isProduction: true }),
+
output({ format: 'esm', isProduction: true }),
+
],
+
},
+
{
+
...commonConfig,
+
input: {
+
'use-interactions': './src/index.ts',
+
},
+
plugins: [
+
...commonPlugins,
+
dts({
+
compilerOptions: {
+
preserveSymlinks: false,
+
},
+
}),
+
],
+
output: {
+
minifyInternalExports: false,
+
entryFileNames: '[name].d.ts',
+
dir: './dist',
+
},
+
},
+
];
+2 -7
src/useDialogFocus.ts
···
import { snapshotSelection, restoreSelection } from './utils/selection';
-
import {
-
getFirstFocusTarget,
-
getFocusTargets,
-
getNextFocusTarget,
-
focus,
-
} from './utils/focus';
import { click } from './utils/click';
import { useLayoutEffect } from './utils/react';
import { contains, isInputElement } from './utils/element';
···
event.code === 'Enter'
) {
// Move focus to first target when Enter is pressed
-
const newTarget = getFirstFocusTarget(element);
if (newTarget) {
willReceiveFocus = true;
focus(newTarget);
···
import { snapshotSelection, restoreSelection } from './utils/selection';
+
import { getFocusTargets, getNextFocusTarget, focus } from './utils/focus';
import { click } from './utils/click';
import { useLayoutEffect } from './utils/react';
import { contains, isInputElement } from './utils/element';
···
event.code === 'Enter'
) {
// Move focus to first target when Enter is pressed
+
const newTarget = getFocusTargets(element)[0];
if (newTarget) {
willReceiveFocus = true;
focus(newTarget);
+2 -2
src/useMenuFocus.ts
···
snapshotSelection,
restoreSelection,
} from './utils/selection';
-
import { getFirstFocusTarget, getFocusTargets, focus } from './utils/focus';
import { click } from './utils/click';
import { useLayoutEffect } from './utils/react';
import { contains, isInputElement } from './utils/element';
···
event.code === 'Enter'
) {
// Move focus to first target when enter is pressed
-
focus(getFirstFocusTarget(element));
} else if (
owner &&
!contains(ref.current, owner) &&
···
snapshotSelection,
restoreSelection,
} from './utils/selection';
+
import { getFocusTargets, focus } from './utils/focus';
import { click } from './utils/click';
import { useLayoutEffect } from './utils/react';
import { contains, isInputElement } from './utils/element';
···
event.code === 'Enter'
) {
// Move focus to first target when enter is pressed
+
focus(getFocusTargets(element)[0]);
} else if (
owner &&
!contains(ref.current, owner) &&
+2 -6
src/useModalFocus.ts
···
restoreSelection,
} from './utils/selection';
-
import {
-
getAutofocusTarget,
-
getFirstFocusTarget,
-
getFocusTargets,
-
} from './utils/focus';
import { useLayoutEffect } from './utils/react';
import { contains } from './utils/element';
···
contains(element, event.target) &&
!contains(element, event.relatedTarget)
) {
-
const target = getFirstFocusTarget(element);
if (target) target.focus();
}
}
···
restoreSelection,
} from './utils/selection';
+
import { getAutofocusTarget, getFocusTargets } from './utils/focus';
import { useLayoutEffect } from './utils/react';
import { contains } from './utils/element';
···
contains(element, event.target) &&
!contains(element, event.relatedTarget)
) {
+
const target = getFocusTargets(element)[0];
if (target) target.focus();
}
}
+3 -4
src/usePriority.ts
···
priorityStack.push(element);
priorityStack.sort(sortByHierarchy);
listeners.add(onChange);
-
listeners.forEach(fn => fn());
return () => {
-
const index = priorityStack.indexOf(element);
-
priorityStack.splice(index, 1);
listeners.delete(onChange);
-
listeners.forEach(fn => fn());
};
}, [ref.current, hasPriority, isDisabled]);
···
priorityStack.push(element);
priorityStack.sort(sortByHierarchy);
listeners.add(onChange);
+
for (const listener of listeners) listener();
return () => {
+
priorityStack.splice(priorityStack.indexOf(element), 1);
listeners.delete(onChange);
+
for (const listener of listeners) listener();
};
}, [ref.current, hasPriority, isDisabled]);
-1
src/utils/__tests__/focus.test.tsx
···
<input type="hidden" className="ignored" />
<input type="text" disabled className="ignored" />
<button tabIndex={-1} className="ignored" />
-
<button style={{ visibility: 'hidden' }} className="ignored">Invisible</button>
<button style={{ display: 'none' }} className="ignored">Invisible</button>
<a className="ignored">No href</a>
···
<input type="hidden" className="ignored" />
<input type="text" disabled className="ignored" />
<button tabIndex={-1} className="ignored" />
<button style={{ display: 'none' }} className="ignored">Invisible</button>
<a className="ignored">No href</a>
+6 -9
src/utils/__tests__/selection.test.tsx
···
selection = snapshotSelection();
// check selection matches expected state
-
expect(selection).to.deep.equal({
-
element: $el.get(0),
-
method: 'focus',
-
});
});
// unfocus the button
···
selection = snapshotSelection();
// check selection matches expected state
-
expect(selection).to.deep.equal({
-
element: $el.get(0),
-
method: 'setSelectionRange',
-
arguments: [2, 2, 'none'],
-
});
});
// unfocus the input
···
selection = snapshotSelection();
// check selection matches expected state
+
expect(selection?.element).to.deep.equal(
+
$el.get(0),
+
);
});
// unfocus the button
···
selection = snapshotSelection();
// check selection matches expected state
+
expect(selection?.element).to.deep.equal(
+
$el.get(0),
+
);
});
// unfocus the input
+1 -10
src/utils/click.ts
···
import { contains } from './element';
-
import { focus } from './focus';
-
-
const clickableSelectors = [
-
'[contenteditable]',
-
'input:not([type="hidden"]):not([disabled])',
-
'button:not([disabled])',
-
'select:not([disabled])',
-
'a[href]',
-
].join(',');
export const click = (node: Element) => {
const activeElement = document.activeElement;
if (!activeElement || contains(node, activeElement)) {
let target: Element | null = node;
-
if (node.tagName === 'LABEL') {
const forId = node.getAttribute('for');
target = forId ? document.getElementById(forId) : null;
···
+
import { clickableSelectors, focus } from './focus';
import { contains } from './element';
export const click = (node: Element) => {
const activeElement = document.activeElement;
if (!activeElement || contains(node, activeElement)) {
let target: Element | null = node;
if (node.tagName === 'LABEL') {
const forId = node.getAttribute('for');
target = forId ? document.getElementById(forId) : null;
+11 -19
src/utils/element.ts
···
/** Returns a given tab index for an element, defaulting to zero. */
-
export const getTabIndex = (node: Element): number => {
-
const index = parseInt(node.getAttribute('tabindex')!, 10);
-
return (
-
(index === index && !(node as HTMLElement).isContentEditable && index) || 0
-
);
-
};
/** Returns whether an element is visible in the context of focusability. */
-
export const isVisible = (node: Element): boolean =>
-
!!(
-
(node.tagName !== 'INPUT' ||
-
(node as HTMLInputElement).type !== 'hidden') &&
-
node.getClientRects().length &&
-
getComputedStyle(node).visibility !== 'hidden'
-
);
/** Returns whether an element accepts text input. */
export const isInputElement = (node: Element): boolean =>
-
!!(
-
node.tagName === 'INPUT' ||
-
node.tagName === 'TEXTAREA' ||
-
(node as HTMLElement).isContentEditable
-
);
export const contains = (
owner: Element | EventTarget | null,
node: Element | EventTarget | null
-
) =>
!!(
node &&
owner &&
···
+
import { inputSelectors } from './focus';
+
+
const excludeSelector =
+
':not([tabindex^="-"]):not([aria-modal]):not([role="dialog"])';
+
/** Returns a given tab index for an element, defaulting to zero. */
+
export const getTabIndex = (node: HTMLElement): number =>
+
(!node.isContentEditable && node.tabIndex) || 0;
/** Returns whether an element is visible in the context of focusability. */
+
export const isVisible = (node: Element): node is HTMLElement =>
+
node.matches(excludeSelector) && node.getClientRects().length > 0;
/** Returns whether an element accepts text input. */
export const isInputElement = (node: Element): boolean =>
+
node.matches(inputSelectors);
export const contains = (
owner: Element | EventTarget | null,
node: Element | EventTarget | null
+
): owner is HTMLElement =>
!!(
node &&
owner &&
+37 -63
src/utils/focus.ts
···
import { getTabIndex, isVisible } from './element';
-
const excludeSelector =
-
':not([tabindex^="-"]):not([aria-modal]):not([role="dialog"])';
-
const focusableSelectors = [
-
'input:not([type="hidden"]):not([disabled])' + excludeSelector,
-
'select:not([disabled])' + excludeSelector,
-
'textarea:not([disabled])' + excludeSelector,
-
'button:not([disabled])' + excludeSelector,
-
'iframe' + excludeSelector,
-
'a[href]' + excludeSelector,
-
'audio[controls]' + excludeSelector,
-
'video[controls]' + excludeSelector,
-
'[contenteditable]' + excludeSelector,
-
'[tabindex]' + excludeSelector,
-
].join(',');
/** Generic sorting function for tupel containing elements with indices and tab indices. */
-
const sortByTabindex = <T extends HTMLElement>(
-
a: [number, number, T],
-
b: [number, number, T]
-
) => {
-
return a[1] === a[1] ? a[0] - b[0] : a[1] - a[1];
};
/** Returns whether this node is focusable. */
export const isFocusTarget = (node: Element): boolean =>
!!node.matches(focusableSelectors) && isVisible(node);
-
/** Returns whether this node may contain focusable elements. */
-
export const hasFocusTargets = (node: Element): boolean =>
-
!node.matches(excludeSelector) &&
-
isVisible(node) &&
-
!!node.querySelector(focusableSelectors);
-
/** Returns a sorted list of focus targets inside the given element. */
-
export const getFocusTargets = (node: Element): HTMLElement[] => {
-
const elements = node.querySelectorAll(focusableSelectors);
-
const targets: HTMLElement[] = [];
-
const tabIndexTargets: [
-
index: number,
-
tabIndex: number,
-
element: HTMLElement
-
][] = [];
-
for (let i = 0, l = elements.length; i < l; i++) {
-
const element = elements[i] as HTMLElement;
-
if (isVisible(element)) {
-
const tabIndex = getTabIndex(element);
-
if (tabIndex === 0) {
-
targets.push(element);
-
} else if (tabIndex > 0) {
-
tabIndexTargets.push([i, tabIndex, element]);
-
}
-
}
-
}
-
-
return tabIndexTargets.length
-
? tabIndexTargets
-
.sort(sortByTabindex)
-
.map(x => x[2])
-
.concat(targets)
-
: targets;
-
};
-
/** Returns the first focus target that should be focused automatically. */
-
export const getFirstFocusTarget = (node: HTMLElement): HTMLElement | null =>
-
getFocusTargets(node)[0] || null;
/** Returns the first focus target that should be focused automatically in a modal/dialog. */
export const getAutofocusTarget = (node: HTMLElement): HTMLElement => {
const elements = node.querySelectorAll(focusableSelectors);
-
for (let i = 0, l = elements.length; i < l; i++) {
-
const element = elements[i] as HTMLElement;
-
if (isVisible(element) && element.matches('[autofocus]')) return element;
-
}
-
-
node.setAttribute('tabindex', '-1');
return node;
};
···
while (
(next = reverse ? next.previousElementSibling : next.nextElementSibling)
) {
-
if (isVisible(next) && !!next.matches(focusableSelectors)) {
return next as HTMLElement;
-
} else if (hasFocusTargets(next)) {
const targets = getFocusTargets(next);
if (targets.length) return targets[reverse ? targets.length - 1 : 0];
}
···
import { getTabIndex, isVisible } from './element';
+
export const inputSelectors =
+
'input:not([type="hidden"]):not([disabled])' +
+
',textarea:not([disabled])' +
+
',[contenteditable]';
+
export const clickableSelectors =
+
inputSelectors +
+
',select:not([disabled])' +
+
',button:not([disabled])' +
+
',a[href]';
+
+
const focusableSelectors =
+
clickableSelectors +
+
',select:not([disabled])' +
+
',button:not([disabled])' +
+
',iframe' +
+
',a[href]' +
+
',audio[controls]' +
+
',video[controls]' +
+
',[tabindex]';
/** Generic sorting function for tupel containing elements with indices and tab indices. */
+
const sortByTabindex = (a: HTMLElement, b: HTMLElement) => {
+
const tabIndexA = getTabIndex(a) || 1 << 29;
+
const tabIndexB = getTabIndex(b) || 1 << 29;
+
return tabIndexA - tabIndexB;
};
/** Returns whether this node is focusable. */
export const isFocusTarget = (node: Element): boolean =>
!!node.matches(focusableSelectors) && isVisible(node);
/** Returns a sorted list of focus targets inside the given element. */
+
export const getFocusTargets = (node: Element): HTMLElement[] =>
+
([...node.querySelectorAll(focusableSelectors)] as HTMLElement[])
+
.filter(isVisible)
+
.sort(sortByTabindex);
+
/** Returns whether this node may contain focusable elements. */
+
export const hasFocusTargets = (node: Element): boolean =>
+
isVisible(node) && !!getFocusTargets(node).length;
/** Returns the first focus target that should be focused automatically in a modal/dialog. */
export const getAutofocusTarget = (node: HTMLElement): HTMLElement => {
const elements = node.querySelectorAll(focusableSelectors);
+
for (const element of elements)
+
if (isVisible(element) && element.autofocus) return element;
+
node.tabIndex = -1;
return node;
};
···
while (
(next = reverse ? next.previousElementSibling : next.nextElementSibling)
) {
+
if (!isVisible(next)) {
+
continue;
+
} else if (!!next.matches(focusableSelectors)) {
return next as HTMLElement;
+
} else {
const targets = getFocusTargets(next);
if (targets.length) return targets[reverse ? targets.length - 1 : 0];
}
+31 -44
src/utils/selection.ts
···
import { contains } from './element';
-
interface RestoreInputSelection {
-
element: HTMLInputElement;
-
method: 'setSelectionRange';
-
arguments: [number, number, 'forward' | 'backward' | 'none' | undefined];
-
}
-
-
interface RestoreActiveNode {
element: HTMLElement;
-
method: 'focus';
}
-
interface RestoreSelectionRange {
-
element: HTMLElement;
-
method: 'range';
-
range: Range;
-
}
-
-
export type RestoreSelection =
-
| RestoreInputSelection
-
| RestoreActiveNode
-
| RestoreSelectionRange;
-
const hasSelection = (node: HTMLElement): node is HTMLInputElement =>
-
(node.nodeName === 'INPUT' || node.nodeName === 'TEXTAREA') &&
typeof (node as HTMLInputElement).selectionStart === 'number' &&
typeof (node as HTMLInputElement).selectionEnd === 'number';
···
if (!element || !target) {
return null;
} else if (hasSelection(element)) {
return {
element,
-
method: 'setSelectionRange',
-
arguments: [
-
element.selectionStart!,
-
element.selectionEnd!,
-
element.selectionDirection || undefined,
-
],
};
}
-
const selection = window.getSelection && window.getSelection();
if (selection && selection.rangeCount) {
-
const range = selection.getRangeAt(0);
-
if (range.startContainer && contains(target, range.startContainer)) {
-
return { element, method: 'range', range };
}
}
-
return { element, method: 'focus' };
};
/** Restores a given snapshot of a selection, falling back to a simple focus. */
-
export const restoreSelection = (restore: RestoreSelection | null) => {
-
if (!restore || !restore.element.parentNode) {
-
return;
-
} else if (restore.method === 'setSelectionRange') {
-
restore.element.focus();
-
restore.element.setSelectionRange(...restore.arguments);
-
} else if (restore.method === 'range') {
-
const selection = window.getSelection()!;
-
restore.element.focus();
-
selection.removeAllRanges();
-
selection.addRange(restore.range);
-
} else {
-
restore.element.focus();
}
};
···
import { contains } from './element';
+
export interface RestoreSelection {
element: HTMLElement;
+
restore(): void;
}
const hasSelection = (node: HTMLElement): node is HTMLInputElement =>
typeof (node as HTMLInputElement).selectionStart === 'number' &&
typeof (node as HTMLInputElement).selectionEnd === 'number';
···
if (!element || !target) {
return null;
} else if (hasSelection(element)) {
+
const { selectionStart, selectionEnd, selectionDirection } = element;
return {
element,
+
restore() {
+
element.focus();
+
element.setSelectionRange(
+
selectionStart,
+
selectionEnd,
+
selectionDirection || undefined
+
);
+
},
};
}
+
let range: Range | undefined;
+
+
const selection = window.getSelection();
if (selection && selection.rangeCount) {
+
const _range = selection.getRangeAt(0);
+
if (_range.startContainer && contains(target, _range.startContainer)) {
+
range = _range;
}
}
+
return {
+
element,
+
restore() {
+
element.focus();
+
const selection = window.getSelection();
+
if (range && selection) {
+
selection.removeAllRanges();
+
selection.addRange(range);
+
}
+
},
+
};
};
/** Restores a given snapshot of a selection, falling back to a simple focus. */
+
export const restoreSelection = (selection: RestoreSelection | null) => {
+
if (selection && selection.element.parentNode) {
+
selection.restore();
}
};
+2 -1
tsconfig.json
···
"forceConsistentCasingInFileNames": true,
"noUnusedLocals": true,
"noEmit": true,
-
"lib": ["dom", "esnext"],
"jsx": "react",
"module": "es2015",
"moduleResolution": "node",
"target": "esnext",
"strict": true,
"noImplicitAny": false,
···
"forceConsistentCasingInFileNames": true,
"noUnusedLocals": true,
"noEmit": true,
+
"lib": ["dom", "dom.iterable", "esnext"],
"jsx": "react",
"module": "es2015",
"moduleResolution": "node",
+
"skipLibCheck": true,
"target": "esnext",
"strict": true,
"noImplicitAny": false,