From 07b657809169d8bdfd21ac20bed44dc3a9377d5f Mon Sep 17 00:00:00 2001 From: MellyGray Date: Fri, 16 Jun 2023 14:09:53 +0200 Subject: [PATCH 01/30] feat(FilesTable): add table with fake data --- package-lock.json | 3624 ++++++----------- package.json | 1 + packages/design-system/package.json | 2 +- .../tests/component/navbar/Navbar.spec.tsx | 2 +- public/mockServiceWorker.js | 2 +- src/sections/dataset/Dataset.tsx | 5 +- .../dataset/dataset-files/DatasetFiles.tsx | 100 + src/sections/dataset/dataset-files/index.css | 26 + .../dataset/dataset-files/makeData.ts | 41 + .../dataset/dataset-files/useFilesTable.tsx | 80 + .../component/sections/layout/Layout.spec.tsx | 2 +- 11 files changed, 1503 insertions(+), 2382 deletions(-) create mode 100644 src/sections/dataset/dataset-files/DatasetFiles.tsx create mode 100644 src/sections/dataset/dataset-files/index.css create mode 100644 src/sections/dataset/dataset-files/makeData.ts create mode 100644 src/sections/dataset/dataset-files/useFilesTable.tsx diff --git a/package-lock.json b/package-lock.json index acfc8a206..c56b00467 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@faker-js/faker": "^7.6.0", "@istanbuljs/nyc-config-typescript": "^1.0.2", + "@tanstack/react-table": "^8.9.2", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", @@ -120,15 +121,6 @@ "node": ">=6.0.0" } }, - "node_modules/@arcanis/slice-ansi": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@arcanis/slice-ansi/-/slice-ansi-1.1.1.tgz", - "integrity": "sha512-xguP2WR2Dv0gQ7Ykbdb7BNCnPnIPB94uTi0Z2NvkRBEnhbwjOQ7QyQKJXrVQg4qDpiD9hA5l5cCwy/z2OXgc3w==", - "dev": true, - "dependencies": { - "grapheme-splitter": "^1.0.4" - } - }, "node_modules/@aw-web-design/x-default-browser": { "version": "1.4.88", "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.88.tgz", @@ -142,39 +134,39 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz", - "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.0", - "@babel/helper-compilation-targets": "^7.22.1", - "@babel/helper-module-transforms": "^7.22.1", - "@babel/helpers": "^7.22.0", - "@babel/parser": "^7.22.0", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -190,11 +182,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", "dependencies": { - "@babel/types": "^7.22.3", + "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -204,36 +196,36 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.3.tgz", - "integrity": "sha512-ahEoxgqNoYXm0k22TvOke48i1PkavGu0qGCmcq9ugi6gnmvKNaMjKBSrZTnWUi1CFEeNAUiVba0Wtzm03aSkJg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.3" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", "dependencies": { - "@babel/compat-data": "^7.22.0", - "@babel/helper-validator-option": "^7.21.0", + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", "semver": "^6.3.0" @@ -246,19 +238,19 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.1.tgz", - "integrity": "sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.22.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.22.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", "semver": "^6.3.0" }, "engines": { @@ -269,12 +261,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.1.tgz", - "integrity": "sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", "semver": "^6.3.0" }, @@ -303,108 +295,108 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.3.tgz", - "integrity": "sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.3" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dependencies": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.1", - "@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.22.1", - "@babel/types": "^7.22.0" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -414,114 +406,114 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.1.tgz", - "integrity": "sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-member-expression-to-functions": "^7.22.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", - "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", "dependencies": { - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.3" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -594,9 +586,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", "bin": { "parser": "bin/babel-parser.js" }, @@ -605,12 +597,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -620,14 +612,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.3.tgz", - "integrity": "sha512-6r4yRwEnorYByILoDRnEqxtojYKuiIv9FojW2E8GUKo9eWBwbKcd9IiZOZpdyXc64RmyGGyPu3/uAcrz/dq2kQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-transform-optional-chaining": "^7.22.3" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -852,16 +844,10 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, "engines": { "node": ">=6.9.0" }, @@ -961,12 +947,12 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz", - "integrity": "sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -976,12 +962,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -991,12 +977,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.3.tgz", - "integrity": "sha512-i35jZJv6aO7hxEbIWQ41adVfOzjm9dcYDNeWlBMd8p0ZQRtNUCBrmGwZt+H5lb+oOC9a3svp956KP0oWGA1YsA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1030,12 +1016,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1147,12 +1133,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1178,12 +1164,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz", - "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1193,14 +1179,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.3.tgz", - "integrity": "sha512-36A4Aq48t66btydbZd5Fk0/xJqbpg/v4QWI4AH4cYHBXy9Mu42UOupZpebKFiCFNT9S9rJFcsld0gsv0ayLjtA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1211,14 +1197,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1228,12 +1214,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1243,12 +1229,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1258,13 +1244,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.3.tgz", - "integrity": "sha512-mASLsd6rhOrLZ5F3WbCxkzl67mmOnqik0zrg5W6D/X0QMW7HtvnoL1dRARLKIbMP3vXwkwziuLesPqWVGIl6Bw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1274,13 +1260,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.3.tgz", - "integrity": "sha512-5BirgNWNOx7cwbTJCOmKFJ1pZjwk5MUfMIwiBBvsirCJMZeQgs5pk6i1OlkVg+1Vef5LfBahFOrdCnAWvkVKMw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1291,19 +1277,19 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", "globals": "^11.1.0" }, "engines": { @@ -1314,13 +1300,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz", - "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/template": "^7.20.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1330,12 +1316,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", - "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1345,13 +1331,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1361,12 +1347,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1376,12 +1362,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.1.tgz", - "integrity": "sha512-rlhWtONnVBPdmt+jeewS0qSnMz/3yLFrqAP8hHC6EDcrYRSyuz9f9yQhHvVn2Ad6+yO9fHXac5piudeYrInxwQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1392,13 +1378,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1408,12 +1394,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.3.tgz", - "integrity": "sha512-5Ti1cHLTDnt3vX61P9KZ5IG09bFXp4cDVFJIAeCZuxu9OXXJJZp5iP0n/rzM2+iAutJY+KWEyyHcRaHlpQ/P5g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1424,13 +1410,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", - "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", + "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-flow": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1440,12 +1426,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz", - "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1455,14 +1441,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1472,12 +1458,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.3.tgz", - "integrity": "sha512-IuvOMdeOOY2X4hRNAT6kwbePtK21BUyrAEgLKviL8pL6AEEVUVcqtRdN/HJXBLGIbt9T3ETmXRnFedRRmQNTYw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1488,12 +1474,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1503,12 +1489,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.3.tgz", - "integrity": "sha512-CbayIfOw4av2v/HYZEsH+Klks3NC2/MFIR3QR8gnpGNNPEaq2fdlVCRYG/paKs7/5hvBLQ+H70pGWOHtlNEWNA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1519,12 +1505,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1534,13 +1520,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1550,14 +1536,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz", - "integrity": "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-simple-access": "^7.21.5" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1567,15 +1553,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.3.tgz", - "integrity": "sha512-V21W3bKLxO3ZjcBJZ8biSvo5gQ85uIXW2vJfh7JSWf/4SLUSr1tOoHX3ruN4+Oqa2m+BKfsxTR1I+PsvkIWvNw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1585,13 +1571,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1601,13 +1587,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.3.tgz", - "integrity": "sha512-c6HrD/LpUdNNJsISQZpds3TXvfYIAbo+efE9aWmY/PmSRD0agrJ9cPMt4BmArwUQ7ZymEWTFjTyp+yReLJZh0Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1617,12 +1603,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.3.tgz", - "integrity": "sha512-5RuJdSo89wKdkRTqtM9RVVJzHum9c2s0te9rB7vZC1zKKxcioWIy+xcu4OoIAjyFZhb/bp5KkunuLin1q7Ct+w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1632,12 +1618,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.3.tgz", - "integrity": "sha512-CpaoNp16nX7ROtLONNuCyenYdY/l7ZsR6aoVa7rW7nMWisoNoQNIH5Iay/4LDyRjKMuElMqXiBoOQCDLTMGZiw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1648,12 +1634,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.3.tgz", - "integrity": "sha512-+AF88fPDJrnseMh5vD9+SH6wq4ZMvpiTMHh58uLs+giMEyASFVhcT3NkoyO+NebFCNnpHJEq5AXO2txV4AGPDQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1664,16 +1650,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.3.tgz", - "integrity": "sha512-38bzTsqMMCI46/TQnJwPPpy33EjLCc1Gsm2hRTF6zTMWnKsN61vdrpuzIEGQyKEhDSYDKyZHrrd5FMj4gcUHhw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.3", - "@babel/helper-compilation-targets": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.3" + "@babel/plugin-transform-parameters": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1683,13 +1669,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1699,12 +1685,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.3.tgz", - "integrity": "sha512-bnDFWXFzWY0BsOyqaoSXvMQ2F35zutQipugog/rqotL2S4ciFOKlRYUu9djt4iq09oh2/34hqfRR2k1dIvuu4g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1715,13 +1701,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.3.tgz", - "integrity": "sha512-63v3/UFFxhPKT8j8u1jTTGVyITxl7/7AfOqK8C5gz1rHURPUGe3y5mvIf68eYKGoBNahtJnTxBKug4BQOnzeJg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1732,12 +1718,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.3.tgz", - "integrity": "sha512-x7QHQJHPuD9VmfpzboyGJ5aHEr9r7DsAsdxdhJiTB3J3j8dyl+NFZ+rX5Q2RWFDCs61c06qBfS4ys2QYn8UkMw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1747,13 +1733,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.3.tgz", - "integrity": "sha512-fC7jtjBPFqhqpPAE+O4LKwnLq7gGkD3ZmC2E3i4qWH34mH3gOg2Xrq5YMHUq6DM30xhqM1DNftiRaSqVjEG+ug==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1763,14 +1749,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.3.tgz", - "integrity": "sha512-C7MMl4qWLpgVCbXfj3UW8rR1xeCnisQ0cU7YJHV//8oNBS0aCIVg1vFnZXxOckHhEpQyqNNkWmvSEWnMLlc+Vw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1781,12 +1767,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1796,12 +1782,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1811,16 +1797,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.3.tgz", - "integrity": "sha512-JEulRWG2f04a7L8VWaOngWiK6p+JOSpB+DAtwfJgOaej1qdbNxqtK7MwTBHjUA10NeFcszlFNqCdbRcirzh2uQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/types": "^7.22.3" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1830,12 +1816,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@babel/plugin-transform-react-jsx": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1845,12 +1831,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", - "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", + "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1860,12 +1846,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", + "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1875,13 +1861,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1891,12 +1877,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", - "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.1" }, "engines": { @@ -1907,12 +1893,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1922,12 +1908,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1937,13 +1923,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1953,12 +1939,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1968,12 +1954,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1983,12 +1969,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1998,15 +1984,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.3.tgz", - "integrity": "sha512-pyjnCIniO5PNaEuGxT28h0HbMru3qCVrMqVgVOz/krComdIrY9W6FCLBq9NWHY8HDGaUlan+UhmZElDENIfCcw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", + "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/plugin-syntax-typescript": "^7.21.4" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2016,12 +2002,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz", - "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2031,13 +2017,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.3.tgz", - "integrity": "sha512-5ScJ+OmdX+O6HRuMGW4kv7RL9vIKdtdAj9wuWUKy1wbHY3jaM/UlyIiC1G7J6UJiiyMukjjK0QwL3P0vBd0yYg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2047,13 +2033,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2063,13 +2049,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.3.tgz", - "integrity": "sha512-hNufLdkF8vqywRp+P55j4FHXqAX2LRUccoZHH7AFn1pq5ZOO2ISKW9w13bFZVjBoTqeve2HOgoJCcaziJVhGNw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2079,25 +2065,25 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.4.tgz", - "integrity": "sha512-c3lHOjbwBv0TkhYCr+XCR6wKcSZ1QbQTVdSkZUaVpLv8CVWotBMArWUi5UAJrcrQaEnleVkkvaV8F/pmc/STZQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.3", - "@babel/helper-compilation-targets": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.3", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-import-attributes": "^7.22.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -2109,56 +2095,56 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.21.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.3", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-class-properties": "^7.22.3", - "@babel/plugin-transform-class-static-block": "^7.22.3", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.21.5", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-dynamic-import": "^7.22.1", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-export-namespace-from": "^7.22.3", - "@babel/plugin-transform-for-of": "^7.21.5", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-json-strings": "^7.22.3", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.3", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.3", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.3", - "@babel/plugin-transform-new-target": "^7.22.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.3", - "@babel/plugin-transform-numeric-separator": "^7.22.3", - "@babel/plugin-transform-object-rest-spread": "^7.22.3", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-optional-catch-binding": "^7.22.3", - "@babel/plugin-transform-optional-chaining": "^7.22.3", - "@babel/plugin-transform-parameters": "^7.22.3", - "@babel/plugin-transform-private-methods": "^7.22.3", - "@babel/plugin-transform-private-property-in-object": "^7.22.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.21.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.21.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.3", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.3", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.4", + "@babel/types": "^7.22.5", "babel-plugin-polyfill-corejs2": "^0.4.3", "babel-plugin-polyfill-corejs3": "^0.8.1", "babel-plugin-polyfill-regenerator": "^0.5.0", @@ -2173,14 +2159,14 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.21.4.tgz", - "integrity": "sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", + "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-flow-strip-types": "^7.21.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-flow-strip-types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2206,17 +2192,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.3.tgz", - "integrity": "sha512-lxDz1mnZ9polqClBCVBjIVUypoB4qV3/tZUDb/IlYbW1kiiLaXaX+bInbRjl+lNQ/iUZraQ3+S8daEmoELMWug==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", + "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.22.3", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2226,16 +2212,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz", - "integrity": "sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", + "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-typescript": "^7.21.3" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2245,9 +2231,9 @@ } }, "node_modules/@babel/register": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", - "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", + "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", @@ -2398,9 +2384,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz", - "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -2409,31 +2395,31 @@ } }, "node_modules/@babel/template": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/parser": "^7.21.9", - "@babel/types": "^7.21.5" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.3", - "@babel/helper-environment-visitor": "^7.22.1", - "@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.22.4", - "@babel/types": "^7.22.4", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2442,12 +2428,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3138,9 +3124,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3177,9 +3163,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -3224,9 +3210,9 @@ } }, "node_modules/@IQSS/dataverse-client-javascript/node_modules/@types/node": { - "version": "18.16.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.16.tgz", - "integrity": "sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==", + "version": "18.16.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", + "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { @@ -4716,17 +4702,17 @@ } }, "node_modules/@microsoft/api-extractor": { - "version": "7.35.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.35.1.tgz", - "integrity": "sha512-xGVf1lKCYKEyJsspLzQjo4Oo6PGDPH95Z5/te75xQWpcRHcfemb6zTSPtiFeVDHkg9Tan5HW2QXGLwQRkW199w==", + "version": "7.35.4", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.35.4.tgz", + "integrity": "sha512-E/DIIlgu1ZW+AD+Y0UuVe/30rO+Km0CRkDU1aOKQntwKtv/+FodtRAUvzU/vAxq5lQHSsy6jJErLiXR6G3fupA==", "dev": true, "dependencies": { - "@microsoft/api-extractor-model": "7.27.1", + "@microsoft/api-extractor-model": "7.27.3", "@microsoft/tsdoc": "0.14.2", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.59.2", - "@rushstack/rig-package": "0.3.19", - "@rushstack/ts-command-line": "4.13.3", + "@rushstack/node-core-library": "3.59.4", + "@rushstack/rig-package": "0.3.21", + "@rushstack/ts-command-line": "4.15.1", "colors": "~1.2.1", "lodash": "~4.17.15", "resolve": "~1.22.1", @@ -4739,14 +4725,14 @@ } }, "node_modules/@microsoft/api-extractor-model": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.27.1.tgz", - "integrity": "sha512-WgmuQwElTuRLATQxCx+pqk5FtUeRX3FW8WDo7tSDmrN/7+XAggeVg5t8ItiJt688jEdbiPvagZlvjAcJMpXspg==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.27.3.tgz", + "integrity": "sha512-fSFvw7otYHduOkyshjTbapKKgwF8bgquVHvgF8VgeKtMYvqXkoaj7W6VcM7PNY7E2bbblhUgC4XNdqZLD4SJGw==", "dev": true, "dependencies": { "@microsoft/tsdoc": "0.14.2", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.59.2" + "@rushstack/node-core-library": "3.59.4" } }, "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { @@ -4959,9 +4945,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz", - "integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz", + "integrity": "sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==", "engines": { "node": ">=14" } @@ -4978,9 +4964,9 @@ } }, "node_modules/@restart/ui": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.5.tgz", - "integrity": "sha512-kDjhH8lk+aVGc+dPb8wEBXRDx4B1WX6/pqyWi22R3Oim6KQokeLGO2g8MYzwd2/UdjsrDt+HyYFpKihLIN7+/A==", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.6.tgz", + "integrity": "sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA==", "dependencies": { "@babel/runtime": "^7.21.0", "@popperjs/core": "^2.11.6", @@ -5019,9 +5005,9 @@ } }, "node_modules/@rushstack/node-core-library": { - "version": "3.59.2", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.59.2.tgz", - "integrity": "sha512-Od8i9ZXiRPHrnkuNOZ9IjEYRQ9JsBLNHlkWJr1wSQZrD2TVIc8APpIB/FnzEcjfpbJMT4XhtcCZaa0pVx+hTXw==", + "version": "3.59.4", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.59.4.tgz", + "integrity": "sha512-YAKJDC6Mz/KA1D7bvB88WaRX3knt/ZuLzkRu5G9QADGSjLtvTWzCNCytRF2PCSaaHOZaZsWul4F1KQdgFgUDqA==", "dev": true, "dependencies": { "colors": "~1.2.1", @@ -5107,9 +5093,9 @@ "dev": true }, "node_modules/@rushstack/rig-package": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.19.tgz", - "integrity": "sha512-2d0/Gn+qjOYneZbiHjn4SjyDwq9I0WagV37z0F1V71G+yONgH7wlt3K/UoNiDkhA8gTHYPRo2jz3CvttybwSag==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.21.tgz", + "integrity": "sha512-6KPBuZYP/b9U0Qwy1J4vjYtXvLavdmVT7mMelErfqqZ3P/ywoxlFITGr9ZbqD1zmfIVrIfC2jrM6gfm7OHPRhQ==", "dev": true, "dependencies": { "resolve": "~1.22.1", @@ -5117,9 +5103,9 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "4.13.3", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.13.3.tgz", - "integrity": "sha512-6aQIv/o1EgsC/+SpgUyRmzg2QIAL6sudEzw3sWzJKwWuQTc5XRsyZpyldfE7WAmIqMXDao9QG35/NYORjHm5Zw==", + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.15.1.tgz", + "integrity": "sha512-EL4jxZe5fhb1uVL/P/wQO+Z8Rc8FMiWJ1G7VgnPDvdIt5GVjRfK7vwzder1CZQiX3x0PY6uxENYLNGTFd1InRQ==", "dev": true, "dependencies": { "@types/argparse": "1.0.38", @@ -5163,18 +5149,6 @@ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, "node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", @@ -5219,108 +5193,22 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, - "node_modules/@snyk/dep-graph": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@snyk/dep-graph/-/dep-graph-2.6.1.tgz", - "integrity": "sha512-8N+wgLCUDGbyjDpHSpPICM+elcJ06WKFRl/1nVe6OE9dFBpjC64wtFohQgQDlazPxQC2eOLqImR8QlwNQ6hoDQ==", - "dev": true, - "dependencies": { - "event-loop-spinner": "^2.1.0", - "lodash.clone": "^4.5.0", - "lodash.constant": "^3.0.0", - "lodash.filter": "^4.6.0", - "lodash.foreach": "^4.5.0", - "lodash.isempty": "^4.4.0", - "lodash.isequal": "^4.5.0", - "lodash.isfunction": "^3.0.9", - "lodash.isundefined": "^3.0.1", - "lodash.map": "^4.6.0", - "lodash.reduce": "^4.6.0", - "lodash.size": "^4.2.0", - "lodash.transform": "^4.6.0", - "lodash.union": "^4.6.0", - "lodash.values": "^4.3.0", - "object-hash": "^3.0.0", - "packageurl-js": "^1.0.0", - "semver": "^7.0.0", - "tslib": "^2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@snyk/dep-graph/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@snyk/dep-graph/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@snyk/dep-graph/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@snyk/graphlib": { - "version": "2.1.9-patch.3", - "resolved": "https://registry.npmjs.org/@snyk/graphlib/-/graphlib-2.1.9-patch.3.tgz", - "integrity": "sha512-bBY9b9ulfLj0v2Eer0yFYa3syVeIxVKl2EpxSrsVeT4mjA0CltZyHsF0JjoaGXP27nItTdJS5uVsj1NA+3aE+Q==", - "dev": true, - "dependencies": { - "lodash.clone": "^4.5.0", - "lodash.constant": "^3.0.0", - "lodash.filter": "^4.6.0", - "lodash.foreach": "^4.5.0", - "lodash.has": "^4.5.2", - "lodash.isempty": "^4.4.0", - "lodash.isfunction": "^3.0.9", - "lodash.isundefined": "^3.0.1", - "lodash.keys": "^4.2.0", - "lodash.map": "^4.6.0", - "lodash.reduce": "^4.6.0", - "lodash.size": "^4.2.0", - "lodash.transform": "^4.6.0", - "lodash.union": "^4.6.0", - "lodash.values": "^4.3.0" - } - }, "node_modules/@storybook/addon-a11y": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.0.18.tgz", - "integrity": "sha512-kftOzFBpg3goWbLBXDLLsJslfrKYbHs1xtFEH5/4J9NFNE8vZKbIBDQa/R3ezWheL+l2y+5qOlWoLl5z96zlWA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.0.21.tgz", + "integrity": "sha512-bUpJXzXm6cVcHdyIzN004m/mC/yU314dBRrmXmnuZQV5FYuaykrJ7BxmjlsZovl/UZ5fcPm3TdstqqQ1UJMsrQ==", "dev": true, "dependencies": { - "@storybook/addon-highlight": "7.0.18", - "@storybook/channels": "7.0.18", - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/addon-highlight": "7.0.21", + "@storybook/channels": "7.0.21", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/theming": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/theming": "7.0.21", + "@storybook/types": "7.0.21", "axe-core": "^4.2.0", "lodash": "^4.17.21", "react-resize-detector": "^7.1.2" @@ -5343,19 +5231,19 @@ } }, "node_modules/@storybook/addon-actions": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.0.18.tgz", - "integrity": "sha512-3M5AU/ZD79YP88vKlFezIJbIoG/II7wCixUBTmwiC3BeQZDuVsqPNl8eiP6MGT70xwyx7a993lSM5f5N5W93vg==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.0.21.tgz", + "integrity": "sha512-wYH1rDHY4KzLkNeXiMonrAZ4uIZFJVjo3E439mWylnJRqs6lKukCU3iHUx02J0KKeJH+GywRg87B/i42qQK62g==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/theming": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/theming": "7.0.21", + "@storybook/types": "7.0.21", "dequal": "^2.0.2", "lodash": "^4.17.21", "polished": "^4.2.2", @@ -5383,19 +5271,19 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.0.18.tgz", - "integrity": "sha512-cPQy1Ot7Urf4hQz+xnF1YKrqSyR0DRwozBmF+sGzceACWmueFl0CifYZC8RSmaiIyVh0RyWPxZ9F/eT67NX2lA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.0.21.tgz", + "integrity": "sha512-dTifOZQsldBCu5de9p6ucNTh1AwjnbTfy4jj593zUAjnDHaGHvWTSlpvksdYuQ2ru+SdZd6xwGcrk4wyMIo/6g==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/theming": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/theming": "7.0.21", + "@storybook/types": "7.0.21", "memoizerific": "^1.11.3", "ts-dedent": "^2.0.0" }, @@ -5417,20 +5305,20 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.0.18.tgz", - "integrity": "sha512-mD6DE52CCMKugXk2Uab0QxwgfE76kFJroxASmnePnXUNWfP9EZJpJXYE3cyyBbmZuxa46VHDGGEGXQWRl4+Eog==", - "dev": true, - "dependencies": { - "@storybook/blocks": "7.0.18", - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/core-common": "7.0.18", - "@storybook/manager-api": "7.0.18", - "@storybook/node-logger": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/theming": "7.0.18", - "@storybook/types": "7.0.18", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.0.21.tgz", + "integrity": "sha512-EDYidCent5P8GBiJeeHIi/apGS76icFEFLmGcSZod1Smzdt7546bb61ozf1fz3qe2wJRoVCnmRazCo4Zqc4iWA==", + "dev": true, + "dependencies": { + "@storybook/blocks": "7.0.21", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/core-common": "7.0.21", + "@storybook/manager-api": "7.0.21", + "@storybook/node-logger": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/theming": "7.0.21", + "@storybook/types": "7.0.21", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, @@ -5452,28 +5340,28 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.0.18.tgz", - "integrity": "sha512-oq+ZN5809gIRdTZQIpeK1F8BJtL1/VWo9rWvl6ymVOL/Xzdgd7AOfKf9Y99X35RcxAGysRIHLGJjF4bgLoY1Aw==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.0.21.tgz", + "integrity": "sha512-eJxNCMZLN9QHmpEMPoWKw8m6TqL+R38F7fRYuJAAB9VICF8nBn79QD46yKlSxL6UXGyhFmtuQn/Wf3E3a7ywEw==", "dev": true, "dependencies": { "@babel/core": "^7.20.2", "@babel/plugin-transform-react-jsx": "^7.19.0", "@jest/transform": "^29.3.1", "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.0.18", - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/csf-plugin": "7.0.18", - "@storybook/csf-tools": "7.0.18", + "@storybook/blocks": "7.0.21", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/csf-plugin": "7.0.21", + "@storybook/csf-tools": "7.0.21", "@storybook/global": "^5.0.0", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.0.18", - "@storybook/postinstall": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/react-dom-shim": "7.0.18", - "@storybook/theming": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/node-logger": "7.0.21", + "@storybook/postinstall": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/react-dom-shim": "7.0.21", + "@storybook/theming": "7.0.21", + "@storybook/types": "7.0.21", "fs-extra": "^11.1.0", "remark-external-links": "^8.0.0", "remark-slug": "^6.0.0", @@ -5489,24 +5377,24 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.0.18.tgz", - "integrity": "sha512-0XXu7xhtRefA1WxxorKk6BWeeB+7gQ+r2+bG1zQEfBgDYPR06YbPw4H79IZ8JiR97aJRsZBK5UUhOZMDrc5zcQ==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "7.0.18", - "@storybook/addon-backgrounds": "7.0.18", - "@storybook/addon-controls": "7.0.18", - "@storybook/addon-docs": "7.0.18", - "@storybook/addon-highlight": "7.0.18", - "@storybook/addon-measure": "7.0.18", - "@storybook/addon-outline": "7.0.18", - "@storybook/addon-toolbars": "7.0.18", - "@storybook/addon-viewport": "7.0.18", - "@storybook/core-common": "7.0.18", - "@storybook/manager-api": "7.0.18", - "@storybook/node-logger": "7.0.18", - "@storybook/preview-api": "7.0.18", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.0.21.tgz", + "integrity": "sha512-XWPuYpvV30Jp/L/now+yGh7qmx433bvUdKZak8Mg/6U7s84xhWIncAyXoB4ptDE4MlggRAdTEqvkmCybHvY7uw==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "7.0.21", + "@storybook/addon-backgrounds": "7.0.21", + "@storybook/addon-controls": "7.0.21", + "@storybook/addon-docs": "7.0.21", + "@storybook/addon-highlight": "7.0.21", + "@storybook/addon-measure": "7.0.21", + "@storybook/addon-outline": "7.0.21", + "@storybook/addon-toolbars": "7.0.21", + "@storybook/addon-viewport": "7.0.21", + "@storybook/core-common": "7.0.21", + "@storybook/manager-api": "7.0.21", + "@storybook/node-logger": "7.0.21", + "@storybook/preview-api": "7.0.21", "ts-dedent": "^2.0.0" }, "funding": { @@ -5519,14 +5407,14 @@ } }, "node_modules/@storybook/addon-highlight": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.0.18.tgz", - "integrity": "sha512-a3nfUhbu6whoDclIZSV/fzLj132tNNjV05ENTpuN3JpLoMd3+obDUWzeQUs9TetK4RBRN3ewM7sIMEI4oBpgmg==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.0.21.tgz", + "integrity": "sha512-BMMkqLza05VeQl4+U7Gb9GrYm0BnLCU0WzcpPXlqbAZhRw1KliXyofH8buVzXoJ1Ozr9+sOHgc3ujThOrG3KAQ==", "dev": true, "dependencies": { - "@storybook/core-events": "7.0.18", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.0.18" + "@storybook/preview-api": "7.0.21" }, "funding": { "type": "opencollective", @@ -5534,21 +5422,21 @@ } }, "node_modules/@storybook/addon-interactions": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.0.18.tgz", - "integrity": "sha512-V3OD5lSj6Te6Kzc//2k2S79dLPk6Zu1pAbqWAN4RrdXyKj6YCiZ666GmVdiaG+24Qp5UuMeAkd1D05osJlOteA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.0.21.tgz", + "integrity": "sha512-XMY66TJSDkBeiHpVzriQzySRf8meuctmLST0APRiPsU7BoeYoP4EPkmHw+Zuyo2pBvq3/BptHCkeArQ71aJyQw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/core-common": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/core-common": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "7.0.18", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/theming": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/instrumenter": "7.0.21", + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/theming": "7.0.21", + "@storybook/types": "7.0.21", "jest-mock": "^27.0.6", "polished": "^4.2.2", "ts-dedent": "^2.2.0" @@ -5571,19 +5459,19 @@ } }, "node_modules/@storybook/addon-links": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.0.18.tgz", - "integrity": "sha512-xEwflt7bp9FRoZVeqPGb6d3s2Gh+/jaSmnyIxMxrBy2oovKIqu9ptolqz1AhjFOXfaLs9c2RAmJUuFZJtETLxA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.0.21.tgz", + "integrity": "sha512-QqbjnYn+516rMfb5JNhI5RZoa+uh1gVMN0iNKfcgF9tE4Ts7tY0OIody11bhBZksb6ryv4mIe4jIGUMW3DgcgA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/client-logger": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/router": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/router": "7.0.21", + "@storybook/types": "7.0.21", "prop-types": "^15.7.2", "ts-dedent": "^2.0.0" }, @@ -5605,18 +5493,18 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.0.18.tgz", - "integrity": "sha512-iu8vQpGOA+CFYbWR6QNshj20o33OQ/xcTbp5P4U6xGYDUliUBbwJ2KLxcKlmIeBanBrBdz0jPFtHwY4dM1ZdKw==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.0.21.tgz", + "integrity": "sha512-In31QpV810NgHT9wrIXnLOwTnySvm86D1rksDlTunq4EOnE3Q4ngw+oM6JBPn+UhMOHnZGfwBHxOCOsF5DNHtQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/types": "7.0.18" + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/types": "7.0.21" }, "funding": { "type": "opencollective", @@ -5636,18 +5524,18 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.0.18.tgz", - "integrity": "sha512-3vNWO7ezo6GIvidbz8JxFrKtfVEoTQN7tnZx+wpqmCF8ihBORewkpeMUnvgb9ZKjD0X7gE8eQvvG8KKWcyHDBQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.0.21.tgz", + "integrity": "sha512-2NaIixgLjEvGRinLPw7R4VWfZURuce4acpkhjF3QYLqaWCYzxch4nw50fVu2FAPHB3uYh5tjllG9IyMY9PEClQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/types": "7.0.21", "ts-dedent": "^2.0.0" }, "funding": { @@ -5668,16 +5556,16 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.0.18.tgz", - "integrity": "sha512-mwhq962o0WloHAeFjJ6BXO2nzdTo5KE2fqawPpqcB2lwXP6tvaA2tDWwgntjPCHejqWTS+ZTdO4/1xrMhWYt/g==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.0.21.tgz", + "integrity": "sha512-5Fgv1gxSVALvRG7bwm+laLT87Np2BBniPaDzJArItic80LivX5N9/duJ2CO6fjZMu4IVq80F4ESj/LfWTbPJVw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/theming": "7.0.18" + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/theming": "7.0.21" }, "funding": { "type": "opencollective", @@ -5697,18 +5585,18 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.0.18.tgz", - "integrity": "sha512-aVVLBsWXfGDX3z1pc93LWWdG5RUoJbGL/JJPMZGwXdwWpP8V3OBl8D8bgPymyg+MgwhSRZZDDGgnJaVGGwZ6bQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.0.21.tgz", + "integrity": "sha512-OYi5+cB7Fk4ArUpQRK6WrbkaGC1tdSDr8gJkh6Uq7DyCnkQSb01WxEoBMHAgUtVZG26SCquk+Q50LntUmepb9Q==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/theming": "7.0.18", + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/theming": "7.0.21", "memoizerific": "^1.11.3", "prop-types": "^15.7.2" }, @@ -5730,22 +5618,22 @@ } }, "node_modules/@storybook/blocks": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.0.18.tgz", - "integrity": "sha512-HLsuzmUdVIeFXEP5v5vyjnEePRNYjzltwTjCKQhHAlt8/aQZmREiIMOfoMoAa1Rd+On8Ib2DUd2cN10VS18H8A==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.0.21.tgz", + "integrity": "sha512-afyr5qR2uO2gsJEXlzXPhOhMg0tAkUga5WbHQYF+7BxODYRXyXWhx95E1UHulgwTwgZHdzTrON4DmPH8M7NK0A==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.18", - "@storybook/client-logger": "7.0.18", - "@storybook/components": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/channels": "7.0.21", + "@storybook/client-logger": "7.0.21", + "@storybook/components": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/csf": "^0.1.0", - "@storybook/docs-tools": "7.0.18", + "@storybook/docs-tools": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/theming": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/manager-api": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/theming": "7.0.21", + "@storybook/types": "7.0.21", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -5768,15 +5656,15 @@ } }, "node_modules/@storybook/builder-manager": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.0.18.tgz", - "integrity": "sha512-yFMm3xuYkyg2hS1uz3CkvyvLzK7qJsDPVEh7lew8GiJK1Xx8cc+FnAOlRTjWNxvhfiT296wAMCTPWv7LeoSgqQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.0.21.tgz", + "integrity": "sha512-end2biIWtnDLd2JHGphxjNApfjzc76VMU6unhY1LnIi+uDNCbu+KcHcsaz8LHSLpTX4td5+AEuJNqSUOyaNtsQ==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.0.18", - "@storybook/manager": "7.0.18", - "@storybook/node-logger": "7.0.18", + "@storybook/core-common": "7.0.21", + "@storybook/manager": "7.0.21", + "@storybook/node-logger": "7.0.21", "@types/ejs": "^3.1.1", "@types/find-cache-dir": "^3.2.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", @@ -5796,21 +5684,21 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.0.18.tgz", - "integrity": "sha512-Qze6/PwUJq+z776dBoG5uinAEVZyPalZIaU/VOWpTrN8L9FQbL0+HDrZU2E/BMNW+ZfnSjF3V2USLyiutsC1Tw==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.0.21.tgz", + "integrity": "sha512-Zves9giQs6oxsQeGKdmwlaywQaz9ZZqArgOzgYb8WytoDSlVrK81BzZN+gsm6cdxPOzdjOma2KhWi5YTz/d/Zg==", "dev": true, "dependencies": { - "@storybook/channel-postmessage": "7.0.18", - "@storybook/channel-websocket": "7.0.18", - "@storybook/client-logger": "7.0.18", - "@storybook/core-common": "7.0.18", - "@storybook/csf-plugin": "7.0.18", + "@storybook/channel-postmessage": "7.0.21", + "@storybook/channel-websocket": "7.0.21", + "@storybook/client-logger": "7.0.21", + "@storybook/core-common": "7.0.21", + "@storybook/csf-plugin": "7.0.21", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.0.18", - "@storybook/preview": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/node-logger": "7.0.21", + "@storybook/preview": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/types": "7.0.21", "browser-assert": "^1.2.1", "es-module-lexer": "^0.9.3", "express": "^4.17.3", @@ -5845,14 +5733,14 @@ } }, "node_modules/@storybook/channel-postmessage": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-7.0.18.tgz", - "integrity": "sha512-rpwBH5ANdPnugS6+7xG9qHSoS+aPSEnBxDKsONWFubfMTTXQuFkf/793rBbxGkoINdqh8kSdKOM2rIty6e9cmQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-7.0.21.tgz", + "integrity": "sha512-zlm40ZMhi76gVPMJsOLyorcKQy4RpAoVQfdXne83x+xP/A2ppOyXEAhC9pQ5oaKM+ag3EQuIS+yK4zGIeriaYg==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.18", - "@storybook/client-logger": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/channels": "7.0.21", + "@storybook/client-logger": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.0.3" @@ -5863,13 +5751,13 @@ } }, "node_modules/@storybook/channel-websocket": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-7.0.18.tgz", - "integrity": "sha512-QYsZIfe23NN4i+oIdPKHaYBehk3a/HYk57a+M2oR3Frmv8IOqc/e31uH+xx5NxnjHrTJj7Y80ZJw6EKB682S6w==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-7.0.21.tgz", + "integrity": "sha512-YX0h1CAHFNh4i0CsbIwEAMQsHxHhZXgN5SD5I0QGgqttErN4an90k4aah9MNnkyLO8Af9nFp2wL8Nj/yPmJ5bA==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.18", - "@storybook/client-logger": "7.0.18", + "@storybook/channels": "7.0.21", + "@storybook/client-logger": "7.0.21", "@storybook/global": "^5.0.0", "telejson": "^7.0.3" }, @@ -5879,9 +5767,9 @@ } }, "node_modules/@storybook/channels": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.0.18.tgz", - "integrity": "sha512-rkA7ea0M3+dWS+71iHJdiZ5R2QuIdiVg0CgyLJHDagc1qej7pEVNhMWtppeq+X5Pwp9nkz8ZTQ7aCjTf6th0/A==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.0.21.tgz", + "integrity": "sha512-8h4lvGQsdWrn/eLW9D9ZGB8FGTzRuC1almykVThb9SkATKZjUyUvtRT+BklsDIinptham83+0QiSdTrv52kAfA==", "dev": true, "funding": { "type": "opencollective", @@ -5889,21 +5777,21 @@ } }, "node_modules/@storybook/cli": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.0.18.tgz", - "integrity": "sha512-9n4J4thiCUsGSXiRc6ZysqYUaCMCrpu0/qgC+5ngfFRuMmZgUV0y5+0fmaOhT2XjsonTTgucizO82i7+ottCVg==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.0.21.tgz", + "integrity": "sha512-emLFo3CUKFvJJscuJZPTHDPqw7xfV06DAnTH2HskQQN6lhscWYuY+fK804iyk+FTRYZwaHJSyECYmYm06Q1H9w==", "dev": true, "dependencies": { "@babel/core": "^7.20.2", "@babel/preset-env": "^7.20.2", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.0.18", - "@storybook/core-common": "7.0.18", - "@storybook/core-server": "7.0.18", - "@storybook/csf-tools": "7.0.18", - "@storybook/node-logger": "7.0.18", - "@storybook/telemetry": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/codemod": "7.0.21", + "@storybook/core-common": "7.0.21", + "@storybook/core-server": "7.0.21", + "@storybook/csf-tools": "7.0.21", + "@storybook/node-logger": "7.0.21", + "@storybook/telemetry": "7.0.21", + "@storybook/types": "7.0.21", "@types/semver": "^7.3.4", "boxen": "^5.1.2", "chalk": "^4.1.0", @@ -6030,9 +5918,9 @@ "dev": true }, "node_modules/@storybook/client-logger": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.0.18.tgz", - "integrity": "sha512-uKgFdVedYoRDZBVrE1IBdWNHDFln1IxWEeI+7ZiNSQwREG9swHpU5Fa8DceclM/oLjJRuzG1jFzv+XZY8894+Q==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.0.21.tgz", + "integrity": "sha512-ENoBDuVr3RPepm6cBp61GGtGGUuogBzqMUaN4Rti+wYx9sKJlmDA8SR/fMk+GxeiJ5NOnYoa1Q1kCaF8/VFD9A==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -6043,18 +5931,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.0.18.tgz", - "integrity": "sha512-+9XFns29e8FpPLsqA8ZCQ3mNnIIKD3QnqGYkbkCVKi/G1fomvVQsIfsnkrYv5SobTbz29B4aNWxAaeSnO7/OGg==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.0.21.tgz", + "integrity": "sha512-0ZGoNLstaELNb+e2njEmtiMv9gDxBIYKz2xei6Mv9HcaEzIVF0TnRE0Y+gIfCEbNAAERiytaHLkl5TAnE3/LrA==", "dev": true, "dependencies": { "@babel/core": "~7.21.0", "@babel/preset-env": "~7.21.0", "@babel/types": "~7.21.2", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.0.18", - "@storybook/node-logger": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/csf-tools": "7.0.21", + "@storybook/node-logger": "7.0.21", + "@storybook/types": "7.0.21", "cross-spawn": "^7.0.3", "globby": "^11.0.2", "jscodeshift": "^0.14.0", @@ -6114,6 +6002,24 @@ "@babel/core": "^7.4.0-0" } }, + "node_modules/@storybook/codemod/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@storybook/codemod/node_modules/@babel/preset-env": { "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", @@ -6258,16 +6164,16 @@ } }, "node_modules/@storybook/components": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.0.18.tgz", - "integrity": "sha512-Jn1CbF9UAKt8BVaZtuhmthpcZ02VMaCFXR0ISfDXCpiMKnylmpP0+WfXcoKLzz6yS+EW8EW5S9+Qq8xgQY8H7A==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.0.21.tgz", + "integrity": "sha512-5h3ptaQxSwFetd0dhlNTZeaLfDYY7Mj9n/N6pTs71piW5gaM+o/Na7EMhuDDWa001zBXYdJYdcKU/a7FDQDuGQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", + "@storybook/client-logger": "7.0.21", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/theming": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/theming": "7.0.21", + "@storybook/types": "7.0.21", "memoizerific": "^1.11.3", "use-resize-observer": "^9.1.0", "util-deprecate": "^1.0.2" @@ -6282,13 +6188,13 @@ } }, "node_modules/@storybook/core-client": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.0.18.tgz", - "integrity": "sha512-ueExRZx6fd9LRssgdhDJ0bL4Ir2RrbXzJz/kjIT2KgYY3l7jkhe0dpT3bOgGKjQt0f7XMFU24t/r7aDLGMB+2Q==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.0.21.tgz", + "integrity": "sha512-J3MIJoVCN4M9exC8DVzRqtG6SyINQ0yHXhzjfdCfmHP9OqU7ObywqEFJgMot7By9g/p39Ceqzz6ISbMySw+pmg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/preview-api": "7.0.18" + "@storybook/client-logger": "7.0.21", + "@storybook/preview-api": "7.0.21" }, "funding": { "type": "opencollective", @@ -6296,13 +6202,13 @@ } }, "node_modules/@storybook/core-common": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.0.18.tgz", - "integrity": "sha512-HZAB1NIK/Yv0x9poyzqYcue2tx39+MAF1mbHgGy+JJZRerO2fRShgo8f8VPH9ChbFCoJ7isL5wNhgGdg9kp2kA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.0.21.tgz", + "integrity": "sha512-hxQXufZxbrDqASTfrJ/C4PlIvRwwmdElOrnzeWA4e4pRGK2YUInAsKxN7WKRDL42fBLfrHo3XmdshkvPej4M4A==", "dev": true, "dependencies": { - "@storybook/node-logger": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/node-logger": "7.0.21", + "@storybook/types": "7.0.21", "@types/node": "^16.0.0", "@types/pretty-hrtime": "^1.0.0", "chalk": "^4.1.0", @@ -6327,9 +6233,9 @@ } }, "node_modules/@storybook/core-events": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.0.18.tgz", - "integrity": "sha512-7gxHBQDezdKOeq/u1LL80Bwjfcwsv7XOS3yWQElcgqp+gLaYB6OwwgtkCB2yV6a6l4nep9IdPWE8G3TxIzn9xw==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.0.21.tgz", + "integrity": "sha512-Qjtjrj+hFaC3b00p6q2aAxyLaRQWBf5eEPw5r0djcm5esXIs/q2xvu2xby7PR6KnKg/jT1bU9TOBxWbtKycijQ==", "dev": true, "funding": { "type": "opencollective", @@ -6337,25 +6243,25 @@ } }, "node_modules/@storybook/core-server": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.0.18.tgz", - "integrity": "sha512-zGSGYSoCaSXM28OYKW7zsmpo8VU1icubXLRgdF21fbMhFN1WVS+bPA5+gSkAMf8acq5RNM8uSKskh7E2YDVEqA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.0.21.tgz", + "integrity": "sha512-8MX+tdgiwscQLdoTtlI+jg1Hr76AvE1B5CDYr+L5b/GdiEJa6zJjAtMgrGjCmd+9GYMrV6r6Ef2PuB8GlMvnvQ==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.88", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.0.18", - "@storybook/core-common": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/builder-manager": "7.0.21", + "@storybook/core-common": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.0.18", + "@storybook/csf-tools": "7.0.21", "@storybook/docs-mdx": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.0.18", - "@storybook/node-logger": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/telemetry": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/manager": "7.0.21", + "@storybook/node-logger": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/telemetry": "7.0.21", + "@storybook/types": "7.0.21", "@types/detect-port": "^1.3.0", "@types/node": "^16.0.0", "@types/node-fetch": "^2.5.7", @@ -6424,21 +6330,21 @@ "dev": true }, "node_modules/@storybook/csf": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.0.tgz", - "integrity": "sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", + "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", "dev": true, "dependencies": { "type-fest": "^2.19.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.0.18.tgz", - "integrity": "sha512-Cr/Qr4/H4JIYgbbmDjQIYuqjp6nOaZga73R3KZcuClk27B90sI2ADegMYvORgbFgSkwweNQjgak6hLoOyogAhw==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.0.21.tgz", + "integrity": "sha512-oaCgizetktTzxgJlJURA3RLQSDYAECw80XGbcUdruCMVgU1WrMrMJIdiYLqDDPUWSAZuFp4RsmfRjWTK6WxRUA==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.0.18", + "@storybook/csf-tools": "7.0.21", "unplugin": "^0.10.2" }, "funding": { @@ -6447,9 +6353,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.0.18.tgz", - "integrity": "sha512-0IJ2qdrxleTl67FUzsEvGcy96CY0OKyERE33tAsLNbvWcabdJKpLHP+rJwbsCw4z6IlS+kkmEffeFf5qRPTwkQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.0.21.tgz", + "integrity": "sha512-a3oN29dgf+5pLOTtXyZhfzPhTEPvw44GAoQmi5giUMB486j6PSEq9IPj/birJk9+lX/ho6M9ZzI9QiBMXVeXlQ==", "dev": true, "dependencies": { "@babel/generator": "~7.21.1", @@ -6457,7 +6363,7 @@ "@babel/traverse": "~7.21.2", "@babel/types": "~7.21.2", "@storybook/csf": "^0.1.0", - "@storybook/types": "7.0.18", + "@storybook/types": "7.0.21", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -6536,15 +6442,15 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.0.18.tgz", - "integrity": "sha512-H95dW2DquGQ75ZVrFjvznPdCxT0eW6esDnemzLJB61KitcYZrWRavfrZzFtUcpzIa84OgY5pllFYt636v11LHQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.0.21.tgz", + "integrity": "sha512-V2rgkmLdcariZQEx2VFtmFhQRRj7LyvlrRZjNyL5jMyWYXYG1W/LZhIXgnMOhf0gjkJlCnRAF4LBZVK8dN84BA==", "dev": true, "dependencies": { "@babel/core": "^7.12.10", - "@storybook/core-common": "7.0.18", - "@storybook/preview-api": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/core-common": "7.0.21", + "@storybook/preview-api": "7.0.21", + "@storybook/types": "7.0.21", "@types/doctrine": "^0.0.3", "doctrine": "^3.0.0", "lodash": "^4.17.21" @@ -6561,16 +6467,16 @@ "dev": true }, "node_modules/@storybook/instrumenter": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.0.18.tgz", - "integrity": "sha512-fyQxeuVC0H+w3oyTuByE95xnAQ+l/WhUBVkHV2X+PWjg9vg9Y9JmrbNWynlvz5HLFlsY3qAWJh+ciVRVSvY5Jw==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.0.21.tgz", + "integrity": "sha512-OAygis8zwA1DbcOAgB5k1bgOZcLiKb2lEmGnxJvL1qS4WUScixD3dvG3GOmGAqNdEVtWE5K3w8X3pNW+uN8aqA==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.18", - "@storybook/client-logger": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/channels": "7.0.21", + "@storybook/client-logger": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.0.18" + "@storybook/preview-api": "7.0.21" }, "funding": { "type": "opencollective", @@ -6578,9 +6484,9 @@ } }, "node_modules/@storybook/manager": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.0.18.tgz", - "integrity": "sha512-hasb8XDmkT9lyX2cwb3Xg0ngcNQ1QCNHKurl2YJtXowb1CvawGKokhnVUTso15NCnurolDyw/Wqka1sagfm+Mg==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.0.21.tgz", + "integrity": "sha512-8aOADfVHgejcpJ3cvt92Z3VknaYslH/1LmarOGpcocN7UtXGUuRnkbpHbx7dLYR586hWSXJ7jZmHAQseS+etvw==", "dev": true, "funding": { "type": "opencollective", @@ -6588,19 +6494,19 @@ } }, "node_modules/@storybook/manager-api": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.0.18.tgz", - "integrity": "sha512-anQkm09twL96YkKGXHa+LI0+yMaY6Jxs1lRaetHdMlIqN4VHBHhizHaMgtGfH6xCTuO3WdrKTN7cZii5RH7PBQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.0.21.tgz", + "integrity": "sha512-YgS676/OMq2KmvYomcNzjwsVUtMYUylIt/0z5Fmg7exPXubEGpRd4OZIrQGHgcLKQRKZMK9GcsSkxebHO+qrsg==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.18", - "@storybook/client-logger": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/channels": "7.0.21", + "@storybook/client-logger": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/router": "7.0.18", - "@storybook/theming": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/router": "7.0.21", + "@storybook/theming": "7.0.21", + "@storybook/types": "7.0.21", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -6658,9 +6564,9 @@ "dev": true }, "node_modules/@storybook/node-logger": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.0.18.tgz", - "integrity": "sha512-cIeKEBvELtoVP/5UeQ01GJWZ7wM69/9Q+R5uOtNQBlwWFcCD6AVFWMRqq7ObMvdJG/okhXSF+sDetb+BF3zvdw==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.0.21.tgz", + "integrity": "sha512-km7MfQ7Hk04UsH/ZgwW5iqSxlGi/Z/lw8Mb0Zdv7ms+FllPBPf5BhgjuC7LA6y+3WUghl6ESpDoig2771TNy4w==", "dev": true, "dependencies": { "@types/npmlog": "^4.1.2", @@ -6674,9 +6580,9 @@ } }, "node_modules/@storybook/postinstall": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.0.18.tgz", - "integrity": "sha512-ObIwAK2UiYhXN/7UifISQgBoH5jnyxh6T8kvCw83YhC78SDOPNgIGjToJECizJ7iubtqAWtCfCT5TrGEpyLGbg==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.0.21.tgz", + "integrity": "sha512-eSq+24DQpa58Dw+TlV4KCNbWnyjTAZ7hvBYRs8578qAMB0gsPh6MCPAKcrpN9TTNBMWKQxC5W6QGGVsVJ+8ByQ==", "dev": true, "funding": { "type": "opencollective", @@ -6684,9 +6590,9 @@ } }, "node_modules/@storybook/preview": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.0.18.tgz", - "integrity": "sha512-L53p2eo8G12U6tp7hD3mk5tdWFXLvdEyV9e7a1x9bw1LfH15K/bp8lO6U/W1kkpse7+rqWBqoTjJC1Ktm5Sxog==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.0.21.tgz", + "integrity": "sha512-WHAD0dlwlJGGTEJ2Lv2rbO9KGBbs4P9uy0oofCuVT+W/eKy26Y6cglnBZpT/lSvK3lNJWONtGRWwBqgdb2E9OQ==", "dev": true, "funding": { "type": "opencollective", @@ -6694,18 +6600,18 @@ } }, "node_modules/@storybook/preview-api": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.0.18.tgz", - "integrity": "sha512-xxtC0gPGMn/DbwvS4ZuJaBwfFNsjUCf0yLYHFrNe6fxncbvcLZ550RuyUwYuIRfsiKrlgfa3QmmCa4JM/JesHQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.0.21.tgz", + "integrity": "sha512-IvOxQdSLV3B+82zS8MDHSO/pMEQdKIXJaz3knizhRuuB+cCdfv2Sro3IL3l8m2+90ySSwkfCqVEI4tdIC1ODXg==", "dev": true, "dependencies": { - "@storybook/channel-postmessage": "7.0.18", - "@storybook/channels": "7.0.18", - "@storybook/client-logger": "7.0.18", - "@storybook/core-events": "7.0.18", + "@storybook/channel-postmessage": "7.0.21", + "@storybook/channels": "7.0.21", + "@storybook/client-logger": "7.0.21", + "@storybook/core-events": "7.0.21", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/types": "7.0.18", + "@storybook/types": "7.0.21", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -6721,18 +6627,18 @@ } }, "node_modules/@storybook/react": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.0.18.tgz", - "integrity": "sha512-lumUbHYeuL3qa4SZR9K2YC4UIt1hwW19GuI/6f2HEV5gR9QHHSJHg9HD9pjcxv4fQaiG81ACZ0Sg6lyUkcJvuQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.0.21.tgz", + "integrity": "sha512-yXh/KoMPaaC0pntHxfahsz0lLAW9yN7EIP7puvbBQv0WL4y7Ohi0ggPrWTLxPrGwddaNMJLM1PQlqnh7TXDGyQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/core-client": "7.0.18", - "@storybook/docs-tools": "7.0.18", + "@storybook/client-logger": "7.0.21", + "@storybook/core-client": "7.0.21", + "@storybook/docs-tools": "7.0.21", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.0.18", - "@storybook/react-dom-shim": "7.0.18", - "@storybook/types": "7.0.18", + "@storybook/preview-api": "7.0.21", + "@storybook/react-dom-shim": "7.0.21", + "@storybook/types": "7.0.21", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", "@types/node": "^16.0.0", @@ -6766,9 +6672,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.0.18.tgz", - "integrity": "sha512-O1FRypR8q1katjbznnxI+NtALd2gaWa7KnTwbIDf+ddZltXHMZ8xMiEGEtAMrfXlIuqIr9UvmLRfKZC/ysuA+g==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.0.21.tgz", + "integrity": "sha512-hccpaFWZjZjD5F/hBXU59RdaF2pnN3hvygIAY7P8cIRu9lfhMZWpZyuEJBjHUqHSX+6CoNLzpSQHeVv+6Vo0rg==", "dev": true, "funding": { "type": "opencollective", @@ -6780,15 +6686,15 @@ } }, "node_modules/@storybook/react-vite": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-7.0.18.tgz", - "integrity": "sha512-rxJwp/b0dPazn15xLIeRgwrdZGWmoqoLhU7Mm+AXKToXvbe77i2bjHhkFbz34dpKFtD0i/ajcZSpmsxpxfB0HA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-7.0.21.tgz", + "integrity": "sha512-n9fTdQkpeQrz4E4Odp3IHXUrlBmo6v4bQ9qV8Awz/y3B06uhvNtL9BQgRTySVKTehuFmoAk0KDD2O7QvFxbRuw==", "dev": true, "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "0.2.1", "@rollup/pluginutils": "^4.2.0", - "@storybook/builder-vite": "7.0.18", - "@storybook/react": "7.0.18", + "@storybook/builder-vite": "7.0.21", + "@storybook/react": "7.0.21", "@vitejs/plugin-react": "^3.0.1", "ast-types": "^0.14.2", "magic-string": "^0.27.0", @@ -6808,12 +6714,12 @@ } }, "node_modules/@storybook/router": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.0.18.tgz", - "integrity": "sha512-Mue4s/BnKgdYcsiW9yuvW3qL9k3AgYn5HIhnkBExAteyiUGdAca4IJFhArmGgFktgeLc4ecBQ7sgaCljApnbgg==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.0.21.tgz", + "integrity": "sha512-zVEwW8PPrg3UXaBlVw9s5wXlJhm9AwG0Lta9Oc0limg1JeXtE1alV+VH8b/O5ECjp34mTXHIAyNU1EF0bozgVw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", + "@storybook/client-logger": "7.0.21", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -6827,13 +6733,13 @@ } }, "node_modules/@storybook/telemetry": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.0.18.tgz", - "integrity": "sha512-JP5Z7lGU+oKjNmz2cZW5J7EerwyWBBPOU+NvvooZsymIx02ZvJ4ClmFtolJnBM7m4KoAy50JxV5NQWi+q8PicQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.0.21.tgz", + "integrity": "sha512-yTT38LhCUuk7DULm88tWGGYWkvPMSfeuRESqSfda7MjHOx2K8VAfpX7HTta9fH9QeE3ormV8KSl/x2R6bNeXeQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.18", - "@storybook/core-common": "7.0.18", + "@storybook/client-logger": "7.0.21", + "@storybook/core-common": "7.0.21", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -6935,13 +6841,13 @@ } }, "node_modules/@storybook/theming": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.18.tgz", - "integrity": "sha512-P1gMKa/mKQHIMq0sxBIwTzAcF6v/6hrc62YmkuV62vXu+8zNV2YWbRwywqm3Q6faZEadmb/bL9+z8whaKhCL/g==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.21.tgz", + "integrity": "sha512-tgWoT0IdyPQIg+s/JMnP+MGTsAvNm6FJuiuKPebngids6rdYQ3EA5uQjBVV7De650JLhBFTFocS2Puj4Lti2bw==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.0.18", + "@storybook/client-logger": "7.0.21", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -6955,12 +6861,12 @@ } }, "node_modules/@storybook/types": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.0.18.tgz", - "integrity": "sha512-qPop2CbvmX42/BX29YT9jIzW2TlMcMjAE+KCpcKLBiD1oT5DJ1fhMzpe6RW9HkMegkBxjWx54iamN4oHM/pwcQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.0.21.tgz", + "integrity": "sha512-gZ8XEsg0upyiisbe2Qv+G+XN2+nZCxj6vJKvgWxuBPCjqN3Uw34cgDrIJuSa8YjE/yl/nsaV5s0xYdFXAl7JVQ==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.18", + "@storybook/channels": "7.0.21", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", "file-system-cache": "^2.0.0" @@ -6978,20 +6884,39 @@ "tslib": "^2.4.0" } }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, + "node_modules/@tanstack/react-table": { + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.9.2.tgz", + "integrity": "sha512-Irvw4wqVF9hhuYzmNrlae4IKdlmgSyoRWnApSLebvYzqHoi5tEsYzBj6YPd0hX78aB/L+4w/jgK2eBQVpGfThQ==", "dependencies": { - "defer-to-connect": "^2.0.0" + "@tanstack/table-core": "8.9.2" }, "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" } }, - "node_modules/@testing-library/cypress": { - "version": "9.0.0", + "node_modules/@tanstack/table-core": { + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.9.2.tgz", + "integrity": "sha512-ajc0OF+karBAdaSz7OK09rCoAHB1XI1+wEhu+tDNMPc+XcO+dTlXXN/Vc0a8vym4kElvEjXEDd9c8Zfgt4bekA==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@testing-library/cypress": { + "version": "9.0.0", "resolved": "https://registry.npmjs.org/@testing-library/cypress/-/cypress-9.0.0.tgz", "integrity": "sha512-c1XiCGeHGGTWn0LAU12sFUfoX3qfId5gcSE2yHode+vsyHDWraxDPALjVnHd4/Fa3j4KBcc5k++Ccy6A9qnkMA==", "dev": true, @@ -7194,9 +7119,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.0.tgz", - "integrity": "sha512-TBOjqAGf0hmaqRwpii5LLkJLg7c6OMm4nHLmpsUxwk9bBHtoTC6dAHdVWdGv4TBxj2CZOZY8Xfq8WmfoVi7n4Q==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" @@ -7212,18 +7137,6 @@ "@types/node": "*" } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, "node_modules/@types/chai": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", @@ -7280,12 +7193,6 @@ "integrity": "sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==", "dev": true }, - "node_modules/@types/emscripten": { - "version": "1.39.6", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.6.tgz", - "integrity": "sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==", - "dev": true - }, "node_modules/@types/escodegen": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", @@ -7355,12 +7262,6 @@ "@types/unist": "*" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -7438,15 +7339,6 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/lodash": { "version": "4.14.195", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", @@ -7497,9 +7389,9 @@ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, "node_modules/@types/node": { - "version": "16.18.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.34.tgz", - "integrity": "sha512-VmVm7gXwhkUimRfBwVI1CHhwp86jDWR04B5FGebMMyxV90SlCmFujwUHrxTD4oO+SOYU86SoxvhgeRQJY7iXFg==" + "version": "16.18.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.36.tgz", + "integrity": "sha512-8egDX8dE50XyXWH6C6PRCNkTP106DuUrvdrednFouDSmCi7IOvrqr0frznfZaHifHH/3aq/7a7v9N4wdXMqhBQ==" }, "node_modules/@types/node-fetch": { "version": "2.6.4", @@ -7576,9 +7468,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz", - "integrity": "sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==", + "version": "18.2.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.12.tgz", + "integrity": "sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -7586,9 +7478,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", - "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", + "version": "18.2.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.5.tgz", + "integrity": "sha512-sRQsOS/sCLnpQhR4DSKGTtWFE3FZjpQa86KPVbhUqdYMRZ9FEFcfAytKhR/vUG2rH1oFbOOej6cuD7MFSobDRQ==", "dependencies": { "@types/react": "*" } @@ -7601,15 +7493,6 @@ "@types/react": "*" } }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", @@ -7684,12 +7567,6 @@ "@types/jest": "*" } }, - "node_modules/@types/treeify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/treeify/-/treeify-1.0.0.tgz", - "integrity": "sha512-ONpcZAEYlbPx4EtJwfTyCDQJGUpKf4sEcuySdCVjK5Fj/3vHp5HII1fqa1/+qrsLnpYELCQTfVW/awsGJePoIg==", - "dev": true - }, "node_modules/@types/turndown": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/turndown/-/turndown-5.0.1.tgz", @@ -7736,12 +7613,6 @@ "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", "integrity": "sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==" }, - "node_modules/@types/webpack-env": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.1.tgz", - "integrity": "sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==", - "dev": true - }, "node_modules/@types/yargs": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", @@ -7766,15 +7637,15 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz", - "integrity": "sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.11.tgz", + "integrity": "sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/type-utils": "5.59.8", - "@typescript-eslint/utils": "5.59.8", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/type-utils": "5.59.11", + "@typescript-eslint/utils": "5.59.11", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -7833,14 +7704,14 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.8.tgz", - "integrity": "sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.11.tgz", + "integrity": "sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", "debug": "^4.3.4" }, "engines": { @@ -7860,13 +7731,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz", - "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz", + "integrity": "sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8" + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -7877,13 +7748,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz", - "integrity": "sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.11.tgz", + "integrity": "sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.8", - "@typescript-eslint/utils": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.11", + "@typescript-eslint/utils": "5.59.11", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -7904,9 +7775,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz", - "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz", + "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -7917,13 +7788,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz", - "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz", + "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7997,17 +7868,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz", - "integrity": "sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.11.tgz", + "integrity": "sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -8056,12 +7927,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz", - "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz", + "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/types": "5.59.11", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -8100,142 +7971,6 @@ "node": ">=10.0.0" } }, - "node_modules/@yarnpkg/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/core/-/core-2.4.0.tgz", - "integrity": "sha512-FYjcPNTfDfMKLFafQPt49EY28jnYC82Z2S7oMwLPUh144BL8v8YXzb4aCnFyi5nFC5h2kcrJfZh7+Pm/qvCqGw==", - "dev": true, - "dependencies": { - "@arcanis/slice-ansi": "^1.0.2", - "@types/semver": "^7.1.0", - "@types/treeify": "^1.0.0", - "@yarnpkg/fslib": "^2.4.0", - "@yarnpkg/json-proxy": "^2.1.0", - "@yarnpkg/libzip": "^2.2.1", - "@yarnpkg/parsers": "^2.3.0", - "@yarnpkg/pnp": "^2.3.2", - "@yarnpkg/shell": "^2.4.1", - "binjumper": "^0.1.4", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "ci-info": "^2.0.0", - "clipanion": "^2.6.2", - "cross-spawn": "7.0.3", - "diff": "^4.0.1", - "globby": "^11.0.1", - "got": "^11.7.0", - "json-file-plus": "^3.3.1", - "lodash": "^4.17.15", - "micromatch": "^4.0.2", - "mkdirp": "^0.5.1", - "p-limit": "^2.2.0", - "pluralize": "^7.0.0", - "pretty-bytes": "^5.1.0", - "semver": "^7.1.2", - "stream-to-promise": "^2.2.0", - "tar-stream": "^2.0.1", - "treeify": "^1.1.0", - "tslib": "^1.13.0", - "tunnel": "^0.0.6" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/@yarnpkg/core/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@yarnpkg/core/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/@yarnpkg/core/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/@yarnpkg/core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@yarnpkg/core/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/@yarnpkg/core/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@yarnpkg/core/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@yarnpkg/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@yarnpkg/core/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@yarnpkg/esbuild-plugin-pnp": { "version": "3.0.0-rc.15", "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", @@ -8251,164 +7986,6 @@ "esbuild": ">=0.10.0" } }, - "node_modules/@yarnpkg/fslib": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", - "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", - "dev": true, - "dependencies": { - "@yarnpkg/libzip": "^2.3.0", - "tslib": "^1.13.0" - }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" - } - }, - "node_modules/@yarnpkg/fslib/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@yarnpkg/json-proxy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@yarnpkg/json-proxy/-/json-proxy-2.1.1.tgz", - "integrity": "sha512-meUiCAgCYpXTH1qJfqfz+dX013ohW9p2dKfwIzUYAFutH+lsz1eHPBIk72cuCV84adh9gX6j66ekBKH/bIhCQw==", - "dev": true, - "dependencies": { - "@yarnpkg/fslib": "^2.5.0", - "tslib": "^1.13.0" - }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" - } - }, - "node_modules/@yarnpkg/json-proxy/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@yarnpkg/libzip": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", - "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", - "dev": true, - "dependencies": { - "@types/emscripten": "^1.39.6", - "tslib": "^1.13.0" - }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" - } - }, - "node_modules/@yarnpkg/libzip/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/@yarnpkg/parsers": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-2.5.1.tgz", - "integrity": "sha512-KtYN6Ez3x753vPF9rETxNTPnPjeaHY11Exlpqb4eTII7WRlnGiZ5rvvQBau4R20Ik5KBv+vS3EJEcHyCunwzzw==", - "dev": true, - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^1.13.0" - }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@yarnpkg/pnp": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/pnp/-/pnp-2.3.2.tgz", - "integrity": "sha512-JdwHu1WBCISqJEhIwx6Hbpe8MYsYbkGMxoxolkDiAeJ9IGEe08mQcbX1YmUDV1ozSWlm9JZE90nMylcDsXRFpA==", - "dev": true, - "dependencies": { - "@types/node": "^13.7.0", - "@yarnpkg/fslib": "^2.4.0", - "tslib": "^1.13.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/@yarnpkg/pnp/node_modules/@types/node": { - "version": "13.13.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", - "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==", - "dev": true - }, - "node_modules/@yarnpkg/pnp/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@yarnpkg/shell": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@yarnpkg/shell/-/shell-2.4.1.tgz", - "integrity": "sha512-oNNJkH8ZI5uwu0dMkJf737yMSY1WXn9gp55DqSA5wAOhKvV5DJTXFETxkVgBQhO6Bow9tMGSpvowTMD/oAW/9g==", - "dev": true, - "dependencies": { - "@yarnpkg/fslib": "^2.4.0", - "@yarnpkg/parsers": "^2.3.0", - "clipanion": "^2.6.2", - "cross-spawn": "7.0.3", - "fast-glob": "^3.2.2", - "micromatch": "^4.0.2", - "stream-buffers": "^3.0.2", - "tslib": "^1.13.0" - }, - "bin": { - "shell": "lib/cli.js" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/@yarnpkg/shell/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@zxing/text-encoding": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", @@ -8613,12 +8190,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -8713,11 +8284,11 @@ "dev": true }, "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.2.1.tgz", + "integrity": "sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g==", "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/arr-diff": { @@ -8751,6 +8322,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -8878,12 +8450,6 @@ "node": ">=0.10.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -9041,6 +8607,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -9488,15 +9055,6 @@ "node": ">=8" } }, - "node_modules/binjumper": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/binjumper/-/binjumper-0.1.4.tgz", - "integrity": "sha512-Gdxhj+U295tIM6cO4bJO1jsvSjBVHNpj2o/OwW7pqDEtaqF6KdOxjtbo93jMMKAkP7+u09+bV8DhSqjIv4qR3w==", - "dev": true, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -9686,9 +9244,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "funding": [ { "type": "opencollective", @@ -9704,8 +9262,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", "node-releases": "^2.0.12", "update-browserslist-db": "^1.0.11" }, @@ -9869,33 +9427,6 @@ "node": ">=0.10.0" } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -9936,6 +9467,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -10017,15 +9549,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelcase-keys/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/can-bind-to-host": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/can-bind-to-host/-/can-bind-to-host-1.1.2.tgz", @@ -10036,9 +9559,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001492", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz", - "integrity": "sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==", + "version": "1.0.30001503", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001503.tgz", + "integrity": "sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==", "funding": [ { "type": "opencollective", @@ -10223,20 +9746,14 @@ } }, "node_modules/chromatic": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-6.18.0.tgz", - "integrity": "sha512-Sj7xMFGQ6jSTBrsdgMMjSQAP2OMNogg4GXV4djf4kAp6Dp+pY4FwByIagvbtQRjC33kQVi592FS52vMBOBMEzw==", + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-6.19.7.tgz", + "integrity": "sha512-TQZ1IrFai9/t0gBn4Bpc5ngbZjdWVgkiLvdjXfu82cIxbmHBPj1usp5JJUm7TErh45XdVC+FgVismMepUeKYog==", "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.7", - "@storybook/csf-tools": "^7.0.12", - "@types/webpack-env": "^1.17.0", - "snyk-nodejs-lockfile-parser": "^1.49.0" - }, "bin": { - "chroma": "bin/main.cjs", - "chromatic": "bin/main.cjs", - "chromatic-cli": "bin/main.cjs" + "chroma": "dist/bin.js", + "chromatic": "dist/bin.js", + "chromatic-cli": "dist/bin.js" } }, "node_modules/ci-info": { @@ -10254,9 +9771,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, "node_modules/class-utils": { @@ -10453,12 +9970,6 @@ "node": ">= 10" } }, - "node_modules/clipanion": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/clipanion/-/clipanion-2.6.2.tgz", - "integrity": "sha512-0tOHJNMF9+4R3qcbBL+4IxLErpaYSYvzs10aXuECDbZdJOuJHdagJMAqvLdeaUQTI/o2uSCDRpet6ywDiKOAYw==", - "dev": true - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -10530,18 +10041,6 @@ "node": ">=0.10.0" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", @@ -10559,12 +10058,6 @@ "readable-stream": "^2.3.5" } }, - "node_modules/cloneable-readable/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/cloneable-readable/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -10817,12 +10310,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -10854,20 +10341,20 @@ } }, "node_modules/concurrently": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.1.0.tgz", - "integrity": "sha512-0AB6eOAtaW/r/kX2lCdolaWtT191ICeuJjEJvI9hT3zbPFuZ/iZaJwMRKwbuwADome7OKxk73L7od+fsveZ7tA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz", + "integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==", "dev": true, "dependencies": { "chalk": "^4.1.2", - "date-fns": "^2.29.3", + "date-fns": "^2.30.0", "lodash": "^4.17.21", - "rxjs": "^7.8.0", - "shell-quote": "^1.8.0", - "spawn-command": "0.0.2-1", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", "supports-color": "^8.1.1", "tree-kill": "^1.2.2", - "yargs": "^17.7.1" + "yargs": "^17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", @@ -10952,9 +10439,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.30.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz", - "integrity": "sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==", + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", "dev": true, "dependencies": { "browserslist": "^4.21.5" @@ -10971,9 +10458,9 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", "dev": true, "dependencies": { "import-fresh": "^3.2.1", @@ -11101,9 +10588,9 @@ } }, "node_modules/cypress": { - "version": "12.13.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.13.0.tgz", - "integrity": "sha512-QJlSmdPk+53Zhy69woJMySZQJoWfEWun3X5OOenGsXjRPVfByVTHorxNehbzhZrEzH9RDUDqVcck0ahtlS+N/Q==", + "version": "12.14.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.14.0.tgz", + "integrity": "sha512-HiLIXKXZaIT1RT7sw1sVPt+qKtis3uYNm6KwC4qoYjabwLKaqZlyS/P+uVvvlBNcHIwL/BC6nQZajpbUd7hOgQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -11171,9 +10658,9 @@ } }, "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.48.tgz", - "integrity": "sha512-iL0PIMwejpmuVHgfibHpfDwOdsbmB50wr21X71VnF5d7SsBF7WK+ZvP/SCcFm7Iwb9iiYSap9rlrdhToNAWdxg==", + "version": "14.18.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", + "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", "dev": true }, "node_modules/cypress/node_modules/@types/sinonjs__fake-timers": { @@ -11389,37 +10876,10 @@ "node_modules/decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" } }, "node_modules/dedent": { @@ -11440,34 +10900,6 @@ "node": ">=6" } }, - "node_modules/deep-equal": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.0", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -11535,15 +10967,6 @@ "node": ">=0.8" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -11557,6 +10980,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -11960,9 +11384,9 @@ } }, "node_modules/dotenv": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.3.tgz", - "integrity": "sha512-FYssxsmCTtKL72fGBSvb1K9dRz0/VZeWqFme/vSb7r7323x4CRaHu4LvQ5JG3+s6yt2YPbBrkpiEODktfyjI9A==", + "version": "16.1.4", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", + "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==", "dev": true, "engines": { "node": ">=12" @@ -11992,12 +11416,6 @@ "stream-shift": "^1.0.0" } }, - "node_modules/duplexify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/duplexify/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -12060,9 +11478,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.416", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.416.tgz", - "integrity": "sha512-AUYh0XDTb2vrj0rj82jb3P9hHSyzQNdTPYWZIhPdCOui7/vpme7+HTE07BE5jwuqg/34TZ8ktlRz6GImJ4IXjA==" + "version": "1.4.431", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.431.tgz", + "integrity": "sha512-m232JTVmCawA2vG+1azVxhKZ9Sv1Q//xxNv5PkP5rWxGgQE8c3CiZFrh8Xnp+d1NmNxlu3QQrGIfdeW5TtXX5w==" }, "node_modules/emittery": { "version": "0.10.2", @@ -12192,25 +11610,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -12373,16 +11772,16 @@ } }, "node_modules/eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -12899,15 +12298,6 @@ "node": ">= 0.6" } }, - "node_modules/event-loop-spinner": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/event-loop-spinner/-/event-loop-spinner-2.2.0.tgz", - "integrity": "sha512-KB44sV4Mv7uLIkJHJ5qhiZe5um6th2g57nHQL/uqnPHKP2IswoTRWUteEXTJQL4gW++1zqWUni+H2hGkP51c9w==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/eventemitter2": { "version": "6.4.7", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", @@ -13719,9 +13109,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.207.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.207.0.tgz", - "integrity": "sha512-s90OlXqzWj1xc4yUtqD1Gr8pGVx0/5rk9gsqPrOYF1kBAPMH4opkmzdWgQ8aNe3Pckqtwr8DlYGbfE2GnW+zsg==", + "version": "0.208.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.208.1.tgz", + "integrity": "sha512-VfWzg5/5W6/sO/Zk69ByKWGHOI1aXLRZ0wznxbOfFiOYMtAtP8CePGkGkkZaI5vXkUt7HJzVZ1+0Rxat0k7rgw==", "dev": true, "engines": { "node": ">=0.4.0" @@ -13737,12 +13127,6 @@ "readable-stream": "^2.3.6" } }, - "node_modules/flush-write-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/flush-write-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -13797,6 +13181,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, "dependencies": { "is-callable": "^1.1.3" } @@ -13989,7 +13374,8 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -14013,6 +13399,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14067,6 +13454,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -14228,9 +13616,9 @@ } }, "node_modules/glob-promise": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-6.0.2.tgz", - "integrity": "sha512-Ni2aDyD1ekD6x8/+K4hDriRDbzzfuK4yKpqSymJ4P7IxbtARiOOuU+k40kbHM0sLIlbf1Qh0qdMkAHMZYE6XJQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-6.0.3.tgz", + "integrity": "sha512-m+kxywR5j/2Z2V9zvHKfwwL5Gp7gIFEBX+deTB9w2lJB+wSuw9kcS43VfvTAMk8TXL5JCl/cCjsR+tgNVspGyA==", "dev": true, "dependencies": { "@types/glob": "^8.0.0" @@ -14309,12 +13697,6 @@ "node": ">=0.10.0" } }, - "node_modules/glob-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/glob-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -14501,6 +13883,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -14508,31 +13891,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -14610,6 +13968,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -14621,6 +13980,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14637,6 +13997,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -14648,6 +14009,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -14659,6 +14021,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -14670,6 +14033,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -14892,12 +14256,6 @@ "entities": "^4.4.0" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -14942,19 +14300,6 @@ "node": ">=0.10" } }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -14978,9 +14323,9 @@ } }, "node_modules/i18next": { - "version": "22.5.0", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.0.tgz", - "integrity": "sha512-sqWuJFj+wJAKQP2qBQ+b7STzxZNUmnSxrehBCCj9vDOW9RDYPfqCaK1Hbh2frNYQuPziz6O2CGoJPwtzY3vAYA==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", + "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", "funding": [ { "type": "individual", @@ -15259,6 +14604,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -15300,15 +14646,6 @@ "node": ">= 0.10" } }, - "node_modules/is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -15389,6 +14726,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -15404,6 +14742,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -15423,6 +14762,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -15445,6 +14785,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -15482,6 +14823,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -15529,6 +14871,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -15713,14 +15056,6 @@ "node": ">=8" } }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", @@ -15776,6 +15111,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -15841,6 +15177,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -15873,18 +15210,11 @@ "node": ">=0.10.0" } }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -15908,6 +15238,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -15931,6 +15262,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -15945,6 +15277,7 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -16004,14 +15337,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -16024,18 +15349,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -16078,9 +15391,10 @@ } }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", @@ -18709,9 +18023,9 @@ } }, "node_modules/jest-watch-typeahead/node_modules/type-fest": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.11.1.tgz", - "integrity": "sha512-aCuRNRERRVh33lgQaJRlUxZqzfhzwTrsE98Mc3o3VXqmiaQdHacgUtJ0esp+7MvZ92qhtzKPeusaX6vIEcoreA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", + "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", "dev": true, "engines": { "node": ">=14.16" @@ -19035,9 +18349,9 @@ } }, "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "dependencies": { "psl": "^1.1.33", @@ -19069,28 +18383,6 @@ "node": ">=4" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-file-plus": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/json-file-plus/-/json-file-plus-3.3.1.tgz", - "integrity": "sha512-wo0q1UuiV5NsDPQDup1Km8IwEeqe+olr8tkWxeJq9Bjtcp7DZ0l+yrg28fSC3DEtrE311mhTZ54QGS6oiqnZEA==", - "dev": true, - "dependencies": { - "is": "^3.2.1", - "node.extend": "^2.0.0", - "object.assign": "^4.1.0", - "promiseback": "^2.0.2", - "safer-buffer": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -19184,15 +18476,6 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -19258,12 +18541,6 @@ "node": ">= 0.6.3" } }, - "node_modules/lazystream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -19474,102 +18751,30 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true - }, - "node_modules/lodash.constant": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash.constant/-/lodash.constant-3.0.0.tgz", - "integrity": "sha512-X5XMrB+SdI1mFa81162NSTo/YNd23SLdLOLzcXTwS4inDZ5YCL8X67UFzZJAH4CqIa6R8cr56CShfA5K5MFiYQ==", - "dev": true - }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", - "dev": true - }, - "node_modules/lodash.flatmap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", - "integrity": "sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==", - "dev": true - }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", - "dev": true - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "node_modules/lodash.has": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", - "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==", - "dev": true - }, - "node_modules/lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", - "dev": true - }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", "dev": true }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true - }, - "node_modules/lodash.isundefined": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", - "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", - "dev": true - }, - "node_modules/lodash.keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-4.2.0.tgz", - "integrity": "sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==", - "dev": true - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -19582,48 +18787,12 @@ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", - "dev": true - }, - "node_modules/lodash.size": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.size/-/lodash.size-4.2.0.tgz", - "integrity": "sha512-wbu3SF1XC5ijqm0piNxw59yCbuUf2kaShumYBLWUrcCvwh6C8odz6SY/wGVzCWTQTFL/1Ygbvqg2eLtspUVVAQ==", - "dev": true - }, - "node_modules/lodash.topairs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.topairs/-/lodash.topairs-4.3.0.tgz", - "integrity": "sha512-qrRMbykBSEGdOgQLJJqVSdPWMD7Q+GJJ5jMRfQYb+LTLsw3tYVIabnCzRqTJb2WTo17PG5gNzXuFaZgYH/9SAQ==", - "dev": true - }, - "node_modules/lodash.transform": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==", - "dev": true - }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true - }, - "node_modules/lodash.values": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz", - "integrity": "sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==", - "dev": true - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -19732,15 +18901,6 @@ "get-func-name": "^2.0.0" } }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -19849,9 +19009,9 @@ "dev": true }, "node_modules/markdown-to-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.2.0.tgz", - "integrity": "sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.2.1.tgz", + "integrity": "sha512-9HrdzBAo0+sFz9ZYAGT5fB8ilzTW+q6lPocRxrIesMO+aB40V9MgFfbfMXxlGjf22OpRy+IXlvVaQenicdpgbg==", "dev": true, "engines": { "node": ">= 10" @@ -20654,15 +19814,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -20790,9 +19941,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/msw": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/msw/-/msw-1.2.1.tgz", - "integrity": "sha512-bF7qWJQSmKn6bwGYVPXOxhexTCGD5oJSZg8yt8IBClxvo3Dx/1W0zqE1nX9BSWmzRsCKWfeGWcB/vpqV6aclpw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/msw/-/msw-1.2.2.tgz", + "integrity": "sha512-GsW3PE/Es/a1tYThXcM8YHOZ1S1MtivcS3He/LQbbTCx3rbWJYCtWD5XXyJ53KlNPT7O1VI9sCW3xMtgFe8XpQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -20827,7 +19978,7 @@ "url": "https://opencollective.com/mswjs" }, "peerDependencies": { - "typescript": ">= 4.4.x <= 5.0.x" + "typescript": ">= 4.4.x <= 5.1.x" }, "peerDependenciesMeta": { "typescript": { @@ -20992,9 +20143,9 @@ } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", - "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.1.0.tgz", + "integrity": "sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" @@ -21056,9 +20207,9 @@ } }, "node_modules/node-fetch-native": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.1.1.tgz", - "integrity": "sha512-9VvspTSUp2Sxbl+9vbZTlFGq9lHwE8GDVVekxx6YsNd1YH59sb3Ba8v3Y3cD8PkLNcileGGcA21PFjVl0jzDaw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.2.0.tgz", + "integrity": "sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==", "dev": true }, "node_modules/node-fetch/node_modules/tr46": { @@ -21103,19 +20254,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" }, - "node_modules/node.extend": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.2.tgz", - "integrity": "sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3", - "is": "^3.2.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -21160,18 +20298,6 @@ "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==", "dev": true }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/now-and-later": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", @@ -21522,22 +20648,14 @@ "is-buffer": "^1.1.5" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -21546,6 +20664,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -21561,6 +20680,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -21581,6 +20701,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -21811,12 +20932,6 @@ "readable-stream": "^2.0.1" } }, - "node_modules/ordered-read-streams/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/ordered-read-streams/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -21886,15 +21001,6 @@ "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", "dev": true }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -21963,12 +21069,6 @@ "node": ">=8" } }, - "node_modules/packageurl-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/packageurl-js/-/packageurl-js-1.0.2.tgz", - "integrity": "sha512-fWC4ZPxo80qlh3xN5FxfIoQD3phVY4+EyzTIqyksjhKNDmaicdpxSvkWwIrYTtv9C1/RcUN6pxaTwGmj2NzS6A==", - "dev": true - }, "node_modules/pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", @@ -22127,9 +21227,9 @@ } }, "node_modules/pathe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz", - "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", "dev": true }, "node_modules/pathval": { @@ -22211,40 +21311,31 @@ } }, "node_modules/playwright": { - "version": "1.34.3", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.34.3.tgz", - "integrity": "sha512-UOOVE4ZbGfGkP1KVqWTdXOmm8Pw2pBhfbmlqKMkpiRCQjL5W+J+xRQXpgutFr0iM4pWl8g0GyyASMsqjQfFohw==", + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.35.0.tgz", + "integrity": "sha512-xhFhsoBmKPQfj3dM+HbIiFVlqRCZp2rwdJd/QFd9YBuidabo3TkVv0iuxPQ4vZoMwtSI7qzjY93f5ohdC97hww==", "dev": true, "hasInstallScript": true, "dependencies": { - "playwright-core": "1.34.3" + "playwright-core": "1.35.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=16" } }, "node_modules/playwright-core": { - "version": "1.34.3", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.34.3.tgz", - "integrity": "sha512-2pWd6G7OHKemc5x1r1rp8aQcpvDh7goMBZlJv6Co5vCNLVcQJdhxRL09SGaY6HcyHH9aT4tiynZabMofVasBYw==", + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.35.0.tgz", + "integrity": "sha512-muMXyPmIx/2DPrCHOD1H1ePT01o7OdKxKj2ebmCAYvqhUy+Y1bpal7B0rdoxros7YrXI294JT/DWw2LqyiqTPA==", "dev": true, "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=14" - } - }, - "node_modules/pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=16" } }, "node_modules/polished": { @@ -22877,46 +21968,6 @@ "node": ">=0.4.0" } }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/promise-deferred": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/promise-deferred/-/promise-deferred-2.0.3.tgz", - "integrity": "sha512-n10XaoznCzLfyPFOlEE8iurezHpxrYzyjgq/1eW9Wk1gJwur/N7BdBmjJYJpqMeMcXK4wEbzo2EvZQcqjYcKUQ==", - "dev": true, - "dependencies": { - "promise": "^7.3.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/promiseback": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/promiseback/-/promiseback-2.0.3.tgz", - "integrity": "sha512-VZXdCwS0ppVNTIRfNsCvVwJAaP2b+pxQF7lM8DMWfmpNWyTxB6O5YNbzs+8z0ki/KIBHKHk308NTIl4kJUem3w==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.5", - "promise-deferred": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -23222,15 +22273,12 @@ ] }, "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/ramda": { @@ -23424,9 +22472,9 @@ } }, "node_modules/react-inspector": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.1.tgz", - "integrity": "sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", + "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", "dev": true, "peerDependencies": { "react": "^16.8.4 || ^17.0.0 || ^18.0.0" @@ -23514,11 +22562,11 @@ } }, "node_modules/react-router": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz", - "integrity": "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.13.0.tgz", + "integrity": "sha512-Si6KnfEnJw7gUQkNa70dlpI1bul46FuSxX5t5WwlUBxE25DAz2BjVkwaK8Y2s242bQrZPXCpmwLPtIO5pv4tXg==", "dependencies": { - "@remix-run/router": "1.6.2" + "@remix-run/router": "1.6.3" }, "engines": { "node": ">=14" @@ -23528,12 +22576,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz", - "integrity": "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.13.0.tgz", + "integrity": "sha512-6Nqoqd7fgwxxVGdbiMHTpDHCYPq62d7Wk1Of7B82vH7ZPwwsRaIa22zRZKPPg413R5REVNiyuQPKDG1bubcOFA==", "dependencies": { - "@remix-run/router": "1.6.2", - "react-router": "6.11.2" + "@remix-run/router": "1.6.3", + "react-router": "6.13.0" }, "engines": { "node": ">=14" @@ -23797,6 +22845,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -24277,12 +23326,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -24344,18 +23387,6 @@ "node": ">=10" } }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -24430,9 +23461,9 @@ } }, "node_modules/rollup": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.23.0.tgz", - "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", + "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -24553,9 +23584,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.62.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz", - "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==", + "version": "1.63.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.4.tgz", + "integrity": "sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -24834,6 +23865,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -24871,13 +23903,13 @@ } }, "node_modules/sinon": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.1.0.tgz", - "integrity": "sha512-cS5FgpDdE9/zx7no8bxROHymSlPLZzq0ChbbLk1DrxBfc+eTeBK3y8nIL+nu/0QeYydhhbLIr7ecHJpywjQaoQ==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.1.2.tgz", + "integrity": "sha512-uG1pU54Fis4EfYOPoEi13fmRHgZNg/u+3aReSEzHsN52Bpf+bMVfsBQS5MjouI+rTuG6UBIINlpuuO2Epr7SiA==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.2.0", + "@sinonjs/fake-timers": "^10.1.0", "@sinonjs/samsam": "^8.0.0", "diff": "^5.1.0", "nise": "^5.1.4", @@ -24898,9 +23930,9 @@ } }, "node_modules/sinon/node_modules/@sinonjs/fake-timers": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", - "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.1.0.tgz", + "integrity": "sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" @@ -25143,96 +24175,6 @@ "node": ">=0.10.0" } }, - "node_modules/snyk-config": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/snyk-config/-/snyk-config-5.2.0.tgz", - "integrity": "sha512-Dp2BypMjDjO+kaRcpzB7bt3fYiy4OMtXgT6sM0rrJj7FSxtvpWjUl1uTA18kIRbC40NPswQiyOfLo2w2v0Qz6g==", - "dev": true, - "dependencies": { - "async": "^3.2.2", - "debug": "^4.3.4", - "lodash.merge": "^4.6.2", - "minimist": "^1.2.6" - } - }, - "node_modules/snyk-nodejs-lockfile-parser": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.51.1.tgz", - "integrity": "sha512-NVD93nZwuLg/uhgHpMLk0e28r1Xz2wTsY00zK9L7dPMGF1BKbh05O5WXGagCb7yL5zFcb/xNyIkYyGoaTxWtmQ==", - "dev": true, - "dependencies": { - "@snyk/dep-graph": "^2.3.0", - "@snyk/graphlib": "2.1.9-patch.3", - "@yarnpkg/core": "^2.4.0", - "@yarnpkg/lockfile": "^1.1.0", - "event-loop-spinner": "^2.0.0", - "js-yaml": "^4.1.0", - "lodash.clonedeep": "^4.5.0", - "lodash.flatmap": "^4.5.0", - "lodash.isempty": "^4.4.0", - "lodash.topairs": "^4.3.0", - "micromatch": "^4.0.5", - "p-map": "^4.0.0", - "semver": "^7.3.5", - "snyk-config": "^5.0.0", - "tslib": "^1.9.3", - "uuid": "^8.3.0" - }, - "bin": { - "parse-nodejs-lockfile": "bin/index.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/snyk-nodejs-lockfile-parser/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/snyk-nodejs-lockfile-parser/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/snyk-nodejs-lockfile-parser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/snyk-nodejs-lockfile-parser/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/snyk-nodejs-lockfile-parser/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -25291,9 +24233,9 @@ } }, "node_modules/spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, "node_modules/spawn-sync": { @@ -25568,17 +24510,6 @@ "node": ">= 0.8" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/store2": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", @@ -25586,12 +24517,12 @@ "dev": true }, "node_modules/storybook": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.0.18.tgz", - "integrity": "sha512-FXMmTiomSlLPTHty7vGLr0prPf6pCV07EwAmNOYYYTskitEYV0R7hlhawByd7HuobjIhHvSTKesa1Whl86zLNA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.0.21.tgz", + "integrity": "sha512-NjHn7g4BXoJ5qisMkGQmSdjnXrlEETqmirQpi/NgrwfMV2gE7BO2KmPgxGh1jT0M04y788OSZhffOdKbuvDFMQ==", "dev": true, "dependencies": { - "@storybook/cli": "7.0.18" + "@storybook/cli": "7.0.21" }, "bin": { "sb": "index.js", @@ -25602,59 +24533,12 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/stream-buffers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "node_modules/stream-to-array": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", - "dev": true, - "dependencies": { - "any-promise": "^1.1.0" - } - }, - "node_modules/stream-to-promise": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-2.2.0.tgz", - "integrity": "sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==", - "dev": true, - "dependencies": { - "any-promise": "~1.3.0", - "end-of-stream": "~1.1.0", - "stream-to-array": "~2.3.0" - } - }, - "node_modules/stream-to-promise/node_modules/end-of-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", - "integrity": "sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==", - "dev": true, - "dependencies": { - "once": "~1.3.0" - } - }, - "node_modules/stream-to-promise/node_modules/once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/strict-event-emitter": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", @@ -25858,18 +24742,18 @@ } }, "node_modules/stylelint": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.6.2.tgz", - "integrity": "sha512-fjQWwcdUye4DU+0oIxNGwawIPC5DvG5kdObY5Sg4rc87untze3gC/5g/ikePqVjrAsBUZjwMN+pZsAYbDO6ArQ==", + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.7.0.tgz", + "integrity": "sha512-fQRwHwWuZsDn4ENyE9AsKkOkV9WlD2CmYiVDbdZPdS3iZh0ceypOn1EuwTNuZ8xTrHF+jVeIEzLtFFSlD/nJHg==", "dev": true, "dependencies": { - "@csstools/css-parser-algorithms": "^2.1.1", + "@csstools/css-parser-algorithms": "^2.2.0", "@csstools/css-tokenizer": "^2.1.1", - "@csstools/media-query-list-parser": "^2.0.4", + "@csstools/media-query-list-parser": "^2.1.0", "@csstools/selector-specificity": "^2.2.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.1.3", + "cosmiconfig": "^8.2.0", "css-functions-list": "^3.1.0", "css-tree": "^2.3.1", "debug": "^4.3.4", @@ -25890,11 +24774,11 @@ "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.23", + "postcss": "^8.4.24", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.12", + "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", @@ -27553,12 +26437,6 @@ "xtend": "~4.0.0" } }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -27744,15 +26622,6 @@ "tree-kill": "cli.js" } }, - "node_modules/treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -27850,9 +26719,9 @@ } }, "node_modules/tslib": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", - "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -27875,15 +26744,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -28408,12 +27268,6 @@ "node": ">=0.10.0" } }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -28716,12 +27570,6 @@ "node": ">= 0.10" } }, - "node_modules/vinyl-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/vinyl-fs/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -28933,14 +27781,41 @@ } }, "node_modules/vite-plugin-libcss": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/vite-plugin-libcss/-/vite-plugin-libcss-1.0.6.tgz", - "integrity": "sha512-DUkVPiNEPFRpshhsqek9b/vPH4piytTsrlyRdl84ns4NlR7PJNSmjtDvyBytrL7E+jsrXD5iCEzBOtrChX45CA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-libcss/-/vite-plugin-libcss-1.1.0.tgz", + "integrity": "sha512-Os8PuRSO+8GSbPeZ1ikAejf2+w4HUsF03B+piec3g2jlkO9SuBK1xqsW/U3CzjqmRsUuSx/fjKGVT7IpIOLVQg==", "dev": true, + "dependencies": { + "minimatch": "^9.0.1" + }, "peerDependencies": { "vite": "*" } }, + "node_modules/vite-plugin-libcss/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/vite-plugin-libcss/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/vite/node_modules/@esbuild/android-arm": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", @@ -29635,6 +28510,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -29646,20 +28522,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", @@ -29670,6 +28532,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -29952,7 +28815,16 @@ "react": "^18.2.0", "vite": "4.1.0", "vite-plugin-dts": "^2.3.0", - "vite-plugin-libcss": "^1.0.6" + "vite-plugin-libcss": "1.0.6" + } + }, + "packages/design-system/node_modules/vite-plugin-libcss": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vite-plugin-libcss/-/vite-plugin-libcss-1.0.6.tgz", + "integrity": "sha512-DUkVPiNEPFRpshhsqek9b/vPH4piytTsrlyRdl84ns4NlR7PJNSmjtDvyBytrL7E+jsrXD5iCEzBOtrChX45CA==", + "dev": true, + "peerDependencies": { + "vite": "*" } } } diff --git a/package.json b/package.json index 84de7c454..74e569099 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "dependencies": { "@faker-js/faker": "^7.6.0", "@istanbuljs/nyc-config-typescript": "^1.0.2", + "@tanstack/react-table": "^8.9.2", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", diff --git a/packages/design-system/package.json b/packages/design-system/package.json index 766ddaa1a..c352c73d9 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -31,7 +31,7 @@ "cypress": "^12.5.1", "vite": "4.1.0", "vite-plugin-dts": "^2.3.0", - "vite-plugin-libcss": "^1.0.6", + "vite-plugin-libcss": "1.0.6", "react": "^18.2.0", "axe-playwright": "^1.2.3", "chromatic": "^6.17.4" diff --git a/packages/design-system/tests/component/navbar/Navbar.spec.tsx b/packages/design-system/tests/component/navbar/Navbar.spec.tsx index fb619eac3..20bc1eb1c 100644 --- a/packages/design-system/tests/component/navbar/Navbar.spec.tsx +++ b/packages/design-system/tests/component/navbar/Navbar.spec.tsx @@ -10,7 +10,7 @@ describe('Navbar component', () => { it('renders the brand logo and title', () => { cy.mount() - cy.findByRole('img', { name: 'Brand Logo Image' }).should('exist') + cy.findByAltText('Brand Logo Image').should('exist') cy.findByText('Brand Title').should('exist') }) diff --git a/public/mockServiceWorker.js b/public/mockServiceWorker.js index 87e0f31b8..8ee70b3e4 100644 --- a/public/mockServiceWorker.js +++ b/public/mockServiceWorker.js @@ -2,7 +2,7 @@ /* tslint:disable */ /** - * Mock Service Worker (1.2.1). + * Mock Service Worker (1.2.2). * @see https://github.com/mswjs/msw * - Please do NOT modify this file. * - Please do NOT serve this file on production. diff --git a/src/sections/dataset/Dataset.tsx b/src/sections/dataset/Dataset.tsx index bbc384fd3..bcffecead 100644 --- a/src/sections/dataset/Dataset.tsx +++ b/src/sections/dataset/Dataset.tsx @@ -10,6 +10,7 @@ import { useTranslation } from 'react-i18next' import { DatasetMetadata } from './dataset-metadata/DatasetMetadata' import { DatasetSummary } from './dataset-summary/DatasetSummary' import { DatasetCitation } from './dataset-citation/DatasetCitation' +import { DatasetFiles } from './dataset-files/DatasetFiles' interface DatasetProps { repository: DatasetRepository @@ -50,10 +51,10 @@ export function Dataset({ repository, searchParams }: DatasetProps) { - +
-
Files Section
+
diff --git a/src/sections/dataset/dataset-files/DatasetFiles.tsx b/src/sections/dataset/dataset-files/DatasetFiles.tsx new file mode 100644 index 000000000..9c1c24d8a --- /dev/null +++ b/src/sections/dataset/dataset-files/DatasetFiles.tsx @@ -0,0 +1,100 @@ +import './index.css' +import { flexRender } from '@tanstack/react-table' +import { Table } from 'dataverse-design-system' +import { useFilesTable } from './useFilesTable' + +export function DatasetFiles() { + const { table } = useFilesTable() + + return ( + <> + + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + ) + })} + + ))} + + + {table.getRowModel().rows.map((row) => { + return ( + + {row.getVisibleCells().map((cell) => { + return ( + + ) + })} + + ) + })} + +
+ {header.isPlaceholder ? null : ( + <>{flexRender(header.column.columnDef.header, header.getContext())} + )} +
+ {flexRender(cell.column.columnDef.cell, cell.getContext())} +
+
+ + + + + +
Page
+ + {table.getState().pagination.pageIndex + 1} of {table.getPageCount()} + +
+ + | Go to page: + { + const page = e.target.value ? Number(e.target.value) - 1 : 0 + table.setPageIndex(page) + }} + className="border p-1 rounded w-16" + /> + + +
+ + ) +} diff --git a/src/sections/dataset/dataset-files/index.css b/src/sections/dataset/dataset-files/index.css new file mode 100644 index 000000000..43c09e0f6 --- /dev/null +++ b/src/sections/dataset/dataset-files/index.css @@ -0,0 +1,26 @@ +html { + font-family: sans-serif; + font-size: 14px; +} + +table { + border: 1px solid lightgray; +} + +tbody { + border-bottom: 1px solid lightgray; +} + +th { + border-bottom: 1px solid lightgray; + border-right: 1px solid lightgray; + padding: 2px 4px; +} + +tfoot { + color: gray; +} + +tfoot th { + font-weight: normal; +} diff --git a/src/sections/dataset/dataset-files/makeData.ts b/src/sections/dataset/dataset-files/makeData.ts new file mode 100644 index 000000000..f10f8013c --- /dev/null +++ b/src/sections/dataset/dataset-files/makeData.ts @@ -0,0 +1,41 @@ +import { faker } from '@faker-js/faker' + +export type File = { + name: string + link: string + thumbnail: string + type: string + size: number + publicationDate: string + downloads: number + checksum: string +} + +const range = (len: number) => { + const arr = [] + for (let i = 0; i < len; i++) { + arr.push(i) + } + return arr +} + +const newFile = (): File => { + return { + name: faker.system.fileName(), + link: faker.internet.url(), + thumbnail: faker.image.imageUrl(), + type: faker.system.fileType(), + size: faker.datatype.number(40), + publicationDate: faker.date.recent().toISOString(), + downloads: faker.datatype.number(40), + checksum: faker.datatype.uuid() + } +} + +export function makeData(len: number) { + return range(len).map(() => { + return { + ...newFile() + } + }) +} diff --git a/src/sections/dataset/dataset-files/useFilesTable.tsx b/src/sections/dataset/dataset-files/useFilesTable.tsx new file mode 100644 index 000000000..fce77b839 --- /dev/null +++ b/src/sections/dataset/dataset-files/useFilesTable.tsx @@ -0,0 +1,80 @@ +import { HTMLProps, useEffect, useRef, useState } from 'react' +import { makeData, File } from './makeData' +import { + ColumnDef, + getCoreRowModel, + getFilteredRowModel, + getPaginationRowModel, + useReactTable +} from '@tanstack/react-table' + +export function useFilesTable() { + const [data] = useState(() => makeData(100)) + const [rowSelection, setRowSelection] = useState({}) + const columns: ColumnDef[] = [ + { + id: 'select', + header: ({ table }) => ( + + ), + cell: ({ row }) => ( +
+ +
+ ) + }, + { + header: 'Files', + accessorKey: 'name', + cell: (info) => info.getValue(), + footer: (props) => props.column.id + } + ] + + const table = useReactTable({ + data, + columns, + state: { + rowSelection + }, + enableRowSelection: true, + onRowSelectionChange: setRowSelection, + getCoreRowModel: getCoreRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + debugTable: true + }) + + return { table } +} + +function IndeterminateCheckbox({ + indeterminate, + className = '', + ...rest +}: { indeterminate?: boolean } & HTMLProps) { + const ref = useRef(null) + + useEffect(() => { + if (typeof indeterminate === 'boolean') { + if (ref.current) { + ref.current.indeterminate = !rest.checked && indeterminate + } + } + }, [ref, indeterminate, rest.checked]) + + return +} diff --git a/tests/component/sections/layout/Layout.spec.tsx b/tests/component/sections/layout/Layout.spec.tsx index 8acd58cff..23c103928 100644 --- a/tests/component/sections/layout/Layout.spec.tsx +++ b/tests/component/sections/layout/Layout.spec.tsx @@ -17,7 +17,7 @@ describe('Layout', () => { it('renders the header', () => { cy.customMount() - cy.findByRole('img', { name: 'Brand Logo Image' }).should('exist') + cy.findByAltText('Brand Logo Image').should('exist') cy.findByText('Dataverse').should('exist') cy.findByRole('button', { name: 'Toggle navigation' }).click() From a82528a4759a8e8a79a5bb3d914df8b494080790 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Fri, 16 Jun 2023 18:14:41 +0200 Subject: [PATCH 02/30] feat(FilesTable): add getFilesByDatasetPersistentId use case --- src/dataset/domain/models/Dataset.ts | 5 ++- src/files/domain/models/File.ts | 10 ++++++ .../domain/repositories/FileRepository.ts | 5 +++ .../useCases/getFilesByDatasetPersistentId.ts | 12 +++++++ .../FileJSDataverseRepository.ts | 15 +++++++++ src/sections/dataset/Dataset.tsx | 13 +++++--- src/sections/dataset/DatasetFactory.tsx | 11 +++++-- .../dataset/dataset-files/DatasetFiles.tsx | 22 +++++++++++-- .../dataset/dataset-files/useFiles.tsx | 32 +++++++++++++++++++ .../dataset/dataset-files/useFilesTable.tsx | 6 ++-- src/stories/dataset/Dataset.stories.tsx | 22 ++++++++++--- .../files/FileMockData.ts} | 16 +++------- src/stories/files/FileMockRepository.ts | 14 ++++++++ .../sections/dataset/Dataset.spec.tsx | 26 +++++++++++---- 14 files changed, 175 insertions(+), 34 deletions(-) create mode 100644 src/files/domain/models/File.ts create mode 100644 src/files/domain/repositories/FileRepository.ts create mode 100644 src/files/domain/useCases/getFilesByDatasetPersistentId.ts create mode 100644 src/files/infrastructure/FileJSDataverseRepository.ts create mode 100644 src/sections/dataset/dataset-files/useFiles.tsx rename src/{sections/dataset/dataset-files/makeData.ts => stories/files/FileMockData.ts} (74%) create mode 100644 src/stories/files/FileMockRepository.ts diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index d969d74d1..35941bcef 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -1,3 +1,5 @@ +import { File } from '../../../files/domain/models/File' + export enum DatasetLabelSemanticMeaning { DATASET = 'dataset', FILE = 'file', @@ -100,7 +102,8 @@ export class Dataset { public readonly labels: DatasetLabel[], public readonly summaryFields: DatasetMetadataBlock[], public readonly license: DatasetLicense, - public readonly metadataBlocks: DatasetMetadataBlock[] + public readonly metadataBlocks: DatasetMetadataBlock[], + public files?: File[] ) {} static Builder = class { diff --git a/src/files/domain/models/File.ts b/src/files/domain/models/File.ts new file mode 100644 index 000000000..6a5269a08 --- /dev/null +++ b/src/files/domain/models/File.ts @@ -0,0 +1,10 @@ +export type File = { + name: string + link: string + thumbnail: string + type: string + size: number + publicationDate: string + downloads: number + checksum: string +} diff --git a/src/files/domain/repositories/FileRepository.ts b/src/files/domain/repositories/FileRepository.ts new file mode 100644 index 000000000..fece1c2b7 --- /dev/null +++ b/src/files/domain/repositories/FileRepository.ts @@ -0,0 +1,5 @@ +import { File } from '../models/File' + +export interface FileRepository { + getAllByDatasetPersistentId: (datasetPersistentId: string, version?: string) => Promise +} diff --git a/src/files/domain/useCases/getFilesByDatasetPersistentId.ts b/src/files/domain/useCases/getFilesByDatasetPersistentId.ts new file mode 100644 index 000000000..a94f82e8f --- /dev/null +++ b/src/files/domain/useCases/getFilesByDatasetPersistentId.ts @@ -0,0 +1,12 @@ +import { FileRepository } from '../repositories/FileRepository' +import { File } from '../models/File' + +export async function getFilesByDatasetPersistentId( + fileRepository: FileRepository, + persistentId: string, + version?: string +): Promise { + return fileRepository.getAllByDatasetPersistentId(persistentId, version).catch((error: Error) => { + throw new Error(error.message) + }) +} diff --git a/src/files/infrastructure/FileJSDataverseRepository.ts b/src/files/infrastructure/FileJSDataverseRepository.ts new file mode 100644 index 000000000..d4203d263 --- /dev/null +++ b/src/files/infrastructure/FileJSDataverseRepository.ts @@ -0,0 +1,15 @@ +import { FileRepository } from '../domain/repositories/FileRepository' +import { File } from '../domain/models/File' +import { FilesMockData } from '../../stories/files/FileMockData' + +export class FileJSDataverseRepository implements FileRepository { + // eslint-disable-next-line unused-imports/no-unused-vars + getAllByDatasetPersistentId(persistentId: string, version?: string): Promise { + // TODO - implement using js-dataverse + return new Promise((resolve) => { + setTimeout(() => { + resolve(FilesMockData()) + }, 1000) + }) + } +} diff --git a/src/sections/dataset/Dataset.tsx b/src/sections/dataset/Dataset.tsx index bcffecead..ec69217d5 100644 --- a/src/sections/dataset/Dataset.tsx +++ b/src/sections/dataset/Dataset.tsx @@ -11,9 +11,11 @@ import { DatasetMetadata } from './dataset-metadata/DatasetMetadata' import { DatasetSummary } from './dataset-summary/DatasetSummary' import { DatasetCitation } from './dataset-citation/DatasetCitation' import { DatasetFiles } from './dataset-files/DatasetFiles' +import { FileRepository } from '../../files/domain/repositories/FileRepository' interface DatasetProps { - repository: DatasetRepository + datasetRepository: DatasetRepository + fileRepository: FileRepository searchParams: { persistentId?: string privateUrlToken?: string @@ -21,8 +23,8 @@ interface DatasetProps { } } -export function Dataset({ repository, searchParams }: DatasetProps) { - const { dataset } = useDataset(repository, searchParams) +export function Dataset({ datasetRepository, fileRepository, searchParams }: DatasetProps) { + const { dataset } = useDataset(datasetRepository, searchParams) const { isLoading } = useLoading() const { t } = useTranslation('dataset') @@ -54,7 +56,10 @@ export function Dataset({ repository, searchParams }: DatasetProps) {
- +
diff --git a/src/sections/dataset/DatasetFactory.tsx b/src/sections/dataset/DatasetFactory.tsx index cbc05a693..1c2f7f811 100644 --- a/src/sections/dataset/DatasetFactory.tsx +++ b/src/sections/dataset/DatasetFactory.tsx @@ -4,8 +4,10 @@ import { Dataset } from './Dataset' import { DatasetJSDataverseRepository } from '../../dataset/infrastructure/repositories/DatasetJSDataverseRepository' import { useAnonymized } from './anonymized/AnonymizedContext' import { AnonymizedProvider } from './anonymized/AnonymizedProvider' +import { FileJSDataverseRepository } from '../../files/infrastructure/FileJSDataverseRepository' const datasetRepository = new DatasetJSDataverseRepository() +const fileRepository = new FileJSDataverseRepository() export class DatasetFactory { static create(): ReactElement { @@ -30,13 +32,18 @@ function DatasetWithSearchParams() { if (privateUrlToken) { return ( - + ) } return ( ) diff --git a/src/sections/dataset/dataset-files/DatasetFiles.tsx b/src/sections/dataset/dataset-files/DatasetFiles.tsx index 9c1c24d8a..87f21b1d3 100644 --- a/src/sections/dataset/dataset-files/DatasetFiles.tsx +++ b/src/sections/dataset/dataset-files/DatasetFiles.tsx @@ -2,9 +2,27 @@ import './index.css' import { flexRender } from '@tanstack/react-table' import { Table } from 'dataverse-design-system' import { useFilesTable } from './useFilesTable' +import { FileRepository } from '../../../files/domain/repositories/FileRepository' +import { useFiles } from './useFiles' +import { useEffect } from 'react' -export function DatasetFiles() { - const { table } = useFilesTable() +interface DatasetFilesProps { + filesRepository: FileRepository + datasetPersistentId: string + datasetVersion?: string +} + +export function DatasetFiles({ + filesRepository, + datasetPersistentId, + datasetVersion +}: DatasetFilesProps) { + const { files } = useFiles(filesRepository, datasetPersistentId, datasetVersion) + const { table, setData } = useFilesTable() + + useEffect(() => { + setData(files) + }) return ( <> diff --git a/src/sections/dataset/dataset-files/useFiles.tsx b/src/sections/dataset/dataset-files/useFiles.tsx new file mode 100644 index 000000000..ca2a07fcc --- /dev/null +++ b/src/sections/dataset/dataset-files/useFiles.tsx @@ -0,0 +1,32 @@ +import { useEffect, useState } from 'react' +import { FileRepository } from '../../../files/domain/repositories/FileRepository' +import { File } from '../../../files/domain/models/File' +import { getFilesByDatasetPersistentId } from '../../../files/domain/useCases/getFilesByDatasetPersistentId' + +export function useFiles( + filesRepository: FileRepository, + datasetPersistentId: string, + datasetVersion?: string +) { + const [files, setFiles] = useState([]) + const [isLoading, setIsLoading] = useState(true) + + useEffect(() => { + setIsLoading(true) + + getFilesByDatasetPersistentId(filesRepository, datasetPersistentId, datasetVersion) + .then((files: File[]) => { + setFiles(files) + setIsLoading(false) + }) + .catch((error) => { + console.error('There was an error getting the files', error) + setIsLoading(false) + }) + }, [filesRepository, datasetPersistentId]) + + return { + files, + isLoading + } +} diff --git a/src/sections/dataset/dataset-files/useFilesTable.tsx b/src/sections/dataset/dataset-files/useFilesTable.tsx index fce77b839..b7b10d5f3 100644 --- a/src/sections/dataset/dataset-files/useFilesTable.tsx +++ b/src/sections/dataset/dataset-files/useFilesTable.tsx @@ -1,5 +1,5 @@ import { HTMLProps, useEffect, useRef, useState } from 'react' -import { makeData, File } from './makeData' +import { File } from '../../../files/domain/models/File' import { ColumnDef, getCoreRowModel, @@ -9,7 +9,7 @@ import { } from '@tanstack/react-table' export function useFilesTable() { - const [data] = useState(() => makeData(100)) + const [data, setData] = useState(() => []) const [rowSelection, setRowSelection] = useState({}) const columns: ColumnDef[] = [ { @@ -58,7 +58,7 @@ export function useFilesTable() { debugTable: true }) - return { table } + return { table, setData } } function IndeterminateCheckbox({ diff --git a/src/stories/dataset/Dataset.stories.tsx b/src/stories/dataset/Dataset.stories.tsx index c968966bd..b2a24f44b 100644 --- a/src/stories/dataset/Dataset.stories.tsx +++ b/src/stories/dataset/Dataset.stories.tsx @@ -6,6 +6,7 @@ import { WithLayoutLoading } from '../WithLayoutLoading' import { WithAnonymizedView } from './WithAnonymizedView' import { DatasetMockRepository } from './DatasetMockRepository' import { DatasetMockNoDataRepository } from './DatasetMockNoDataRepository' +import { FilesMockRepository } from '../files/FileMockRepository' const meta: Meta = { title: 'Pages/Dataset', @@ -23,21 +24,33 @@ type Story = StoryObj export const Default: Story = { decorators: [WithLayout], render: () => ( - + ) } export const Loading: Story = { decorators: [WithLayoutLoading], render: () => ( - + ) } export const DatasetNotFound: Story = { decorators: [WithLayout], render: () => ( - + ) } @@ -45,7 +58,8 @@ export const DatasetAnonymizedView: Story = { decorators: [WithLayout, WithAnonymizedView], render: () => ( ) diff --git a/src/sections/dataset/dataset-files/makeData.ts b/src/stories/files/FileMockData.ts similarity index 74% rename from src/sections/dataset/dataset-files/makeData.ts rename to src/stories/files/FileMockData.ts index f10f8013c..1a3506339 100644 --- a/src/sections/dataset/dataset-files/makeData.ts +++ b/src/stories/files/FileMockData.ts @@ -1,15 +1,5 @@ import { faker } from '@faker-js/faker' - -export type File = { - name: string - link: string - thumbnail: string - type: string - size: number - publicationDate: string - downloads: number - checksum: string -} +import { File } from '../../files/domain/models/File' const range = (len: number) => { const arr = [] @@ -32,10 +22,12 @@ const newFile = (): File => { } } -export function makeData(len: number) { +export function makeFiles(len: number): File[] { return range(len).map(() => { return { ...newFile() } }) } + +export const FilesMockData = (): File[] => makeFiles(100) diff --git a/src/stories/files/FileMockRepository.ts b/src/stories/files/FileMockRepository.ts new file mode 100644 index 000000000..422367fdb --- /dev/null +++ b/src/stories/files/FileMockRepository.ts @@ -0,0 +1,14 @@ +import { FileRepository } from '../../files/domain/repositories/FileRepository' +import { FilesMockData } from './FileMockData' +import { File } from '../../files/domain/models/File' + +export class FilesMockRepository implements FileRepository { + // eslint-disable-next-line unused-imports/no-unused-vars + getAllByDatasetPersistentId(persistentId: string, version?: string): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(FilesMockData()) + }, 1000) + }) + } +} diff --git a/tests/component/sections/dataset/Dataset.spec.tsx b/tests/component/sections/dataset/Dataset.spec.tsx index beee775d0..5dbd7ddca 100644 --- a/tests/component/sections/dataset/Dataset.spec.tsx +++ b/tests/component/sections/dataset/Dataset.spec.tsx @@ -6,9 +6,11 @@ import { useLoading } from '../../../../src/sections/loading/LoadingContext' import { ANONYMIZED_FIELD_VALUE } from '../../../../src/dataset/domain/models/Dataset' import { AnonymizedContext } from '../../../../src/sections/dataset/anonymized/AnonymizedContext' import { AnonymizedProvider } from '../../../../src/sections/dataset/anonymized/AnonymizedProvider' +import { FileRepository } from '../../../../src/files/domain/repositories/FileRepository' describe('Dataset', () => { const testDataset = DatasetMother.create() + const fileRepository: FileRepository = {} as FileRepository it('renders skeleton while loading', () => { const datasetRepository: DatasetRepository = {} as DatasetRepository @@ -28,7 +30,8 @@ describe('Dataset', () => { cy.customMount( @@ -48,7 +51,11 @@ describe('Dataset', () => { cy.customMount( - + ) @@ -61,7 +68,11 @@ describe('Dataset', () => { cy.customMount( - + ) @@ -75,7 +86,8 @@ describe('Dataset', () => { cy.customMount( @@ -97,7 +109,8 @@ describe('Dataset', () => { cy.customMount( @@ -127,7 +140,8 @@ describe('Dataset', () => { setAnonymizedView(true) return ( ) From 2a811b861bb8c82f1f1352c1ac513de3f40b9266 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 26 Jun 2023 10:28:32 +0200 Subject: [PATCH 03/30] feat(DatasetFiles): refactor table --- .../dataset/dataset-files/DatasetFiles.tsx | 101 +----------------- .../dataset-files/files-table/FilesTable.tsx | 21 ++++ .../files-table/FilesTableBody.tsx | 23 ++++ .../FilesTableColumnsDefinition.tsx | 36 +++++++ .../files-table/FilesTableHeader.tsx | 26 +++++ .../files-table/FilesTablePagination.tsx | 66 ++++++++++++ .../files-table/IndeterminateCheckbox.tsx | 19 ++++ .../files-table/useFilesTable.tsx | 30 ++++++ .../dataset/dataset-files/useFilesTable.tsx | 80 -------------- 9 files changed, 226 insertions(+), 176 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/FilesTable.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/FilesTableBody.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/FilesTableHeader.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/FilesTablePagination.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/IndeterminateCheckbox.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/useFilesTable.tsx delete mode 100644 src/sections/dataset/dataset-files/useFilesTable.tsx diff --git a/src/sections/dataset/dataset-files/DatasetFiles.tsx b/src/sections/dataset/dataset-files/DatasetFiles.tsx index 87f21b1d3..6c9adf29b 100644 --- a/src/sections/dataset/dataset-files/DatasetFiles.tsx +++ b/src/sections/dataset/dataset-files/DatasetFiles.tsx @@ -1,10 +1,9 @@ import './index.css' -import { flexRender } from '@tanstack/react-table' -import { Table } from 'dataverse-design-system' -import { useFilesTable } from './useFilesTable' +import { useFilesTable } from './files-table/useFilesTable' import { FileRepository } from '../../../files/domain/repositories/FileRepository' import { useFiles } from './useFiles' import { useEffect } from 'react' +import { FilesTable } from './files-table/FilesTable' interface DatasetFilesProps { filesRepository: FileRepository @@ -18,101 +17,11 @@ export function DatasetFiles({ datasetVersion }: DatasetFilesProps) { const { files } = useFiles(filesRepository, datasetPersistentId, datasetVersion) - const { table, setData } = useFilesTable() + const { table, setFilesTableData } = useFilesTable() useEffect(() => { - setData(files) + setFilesTableData(files) }) - return ( - <> - - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - ) - })} - - ))} - - - {table.getRowModel().rows.map((row) => { - return ( - - {row.getVisibleCells().map((cell) => { - return ( - - ) - })} - - ) - })} - -
- {header.isPlaceholder ? null : ( - <>{flexRender(header.column.columnDef.header, header.getContext())} - )} -
- {flexRender(cell.column.columnDef.cell, cell.getContext())} -
-
- - - - - -
Page
- - {table.getState().pagination.pageIndex + 1} of {table.getPageCount()} - -
- - | Go to page: - { - const page = e.target.value ? Number(e.target.value) - 1 : 0 - table.setPageIndex(page) - }} - className="border p-1 rounded w-16" - /> - - -
- - ) + return } diff --git a/src/sections/dataset/dataset-files/files-table/FilesTable.tsx b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx new file mode 100644 index 000000000..c8f4b8797 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx @@ -0,0 +1,21 @@ +import { Table } from 'dataverse-design-system' +import { Table as TableModel } from '@tanstack/react-table' +import { FilesTableHeader } from './FilesTableHeader' +import { FilesTableBody } from './FilesTableBody' +import { FilesTablePagination } from './FilesTablePagination' +import { File } from '../../../../files/domain/models/File' + +interface FilesTableProps { + table: TableModel +} +export function FilesTable({ table }: FilesTableProps) { + return ( + <> + + + +
+ + + ) +} diff --git a/src/sections/dataset/dataset-files/files-table/FilesTableBody.tsx b/src/sections/dataset/dataset-files/files-table/FilesTableBody.tsx new file mode 100644 index 000000000..11ea63ea3 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/FilesTableBody.tsx @@ -0,0 +1,23 @@ +import { flexRender, Row } from '@tanstack/react-table' +import { File } from '../../../../files/domain/models/File' + +interface FilesTableBodyProps { + rows: Row[] +} +export function FilesTableBody({ rows }: FilesTableBodyProps) { + return ( + + {rows.map((row) => { + return ( + + {row.getVisibleCells().map((cell) => { + return ( + {flexRender(cell.column.columnDef.cell, cell.getContext())} + ) + })} + + ) + })} + + ) +} diff --git a/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx new file mode 100644 index 000000000..511895f0b --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx @@ -0,0 +1,36 @@ +import { ColumnDef } from '@tanstack/react-table' +import { File } from '../../../../files/domain/models/File' +import { IndeterminateCheckbox } from './IndeterminateCheckbox' + +export const columns: ColumnDef[] = [ + { + id: 'select', + header: ({ table }) => ( + + ), + cell: ({ row }) => ( +
+ +
+ ) + }, + { + header: 'Files', + accessorKey: 'name', + cell: (info) => info.getValue(), + footer: (props) => props.column.id + } +] diff --git a/src/sections/dataset/dataset-files/files-table/FilesTableHeader.tsx b/src/sections/dataset/dataset-files/files-table/FilesTableHeader.tsx new file mode 100644 index 000000000..e8583014f --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/FilesTableHeader.tsx @@ -0,0 +1,26 @@ +import { flexRender, HeaderGroup } from '@tanstack/react-table' +import { File } from '../../../../files/domain/models/File' + +interface FilesTableHeaderProps { + headers: HeaderGroup[] +} + +export function FilesTableHeader({ headers }: FilesTableHeaderProps) { + return ( + + {headers.map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder ? null : ( + <>{flexRender(header.column.columnDef.header, header.getContext())} + )} + + ) + })} + + ))} + + ) +} diff --git a/src/sections/dataset/dataset-files/files-table/FilesTablePagination.tsx b/src/sections/dataset/dataset-files/files-table/FilesTablePagination.tsx new file mode 100644 index 000000000..cdf5455a8 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/FilesTablePagination.tsx @@ -0,0 +1,66 @@ +import { Table } from '@tanstack/react-table' +import { File } from '../../../../files/domain/models/File' + +interface FilesTablePaginationProps { + table: Table +} + +export function FilesTablePagination({ table }: FilesTablePaginationProps) { + return ( +
+ + + + + +
Page
+ + {table.getState().pagination.pageIndex + 1} of {table.getPageCount()} + +
+ + | Go to page: + { + const page = e.target.value ? Number(e.target.value) - 1 : 0 + table.setPageIndex(page) + }} + className="border p-1 rounded w-16" + /> + + +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/IndeterminateCheckbox.tsx b/src/sections/dataset/dataset-files/files-table/IndeterminateCheckbox.tsx new file mode 100644 index 000000000..d431dca49 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/IndeterminateCheckbox.tsx @@ -0,0 +1,19 @@ +import { HTMLProps, useEffect, useRef } from 'react' + +export function IndeterminateCheckbox({ + indeterminate, + className = '', + ...rest +}: { indeterminate?: boolean } & HTMLProps) { + const ref = useRef(null) + + useEffect(() => { + if (typeof indeterminate === 'boolean') { + if (ref.current) { + ref.current.indeterminate = !rest.checked && indeterminate + } + } + }, [ref, indeterminate, rest.checked]) + + return +} diff --git a/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx b/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx new file mode 100644 index 000000000..ad741f29f --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx @@ -0,0 +1,30 @@ +import { useState } from 'react' +import { File } from '../../../../files/domain/models/File' +import { + getCoreRowModel, + getFilteredRowModel, + getPaginationRowModel, + useReactTable +} from '@tanstack/react-table' +import { columns } from './FilesTableColumnsDefinition' + +export function useFilesTable() { + const [data, setFilesTableData] = useState(() => []) + const [rowSelection, setRowSelection] = useState({}) + + const table = useReactTable({ + data, + columns, + state: { + rowSelection + }, + enableRowSelection: true, + onRowSelectionChange: setRowSelection, + getCoreRowModel: getCoreRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + debugTable: true + }) + + return { table, setFilesTableData } +} diff --git a/src/sections/dataset/dataset-files/useFilesTable.tsx b/src/sections/dataset/dataset-files/useFilesTable.tsx deleted file mode 100644 index b7b10d5f3..000000000 --- a/src/sections/dataset/dataset-files/useFilesTable.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { HTMLProps, useEffect, useRef, useState } from 'react' -import { File } from '../../../files/domain/models/File' -import { - ColumnDef, - getCoreRowModel, - getFilteredRowModel, - getPaginationRowModel, - useReactTable -} from '@tanstack/react-table' - -export function useFilesTable() { - const [data, setData] = useState(() => []) - const [rowSelection, setRowSelection] = useState({}) - const columns: ColumnDef[] = [ - { - id: 'select', - header: ({ table }) => ( - - ), - cell: ({ row }) => ( -
- -
- ) - }, - { - header: 'Files', - accessorKey: 'name', - cell: (info) => info.getValue(), - footer: (props) => props.column.id - } - ] - - const table = useReactTable({ - data, - columns, - state: { - rowSelection - }, - enableRowSelection: true, - onRowSelectionChange: setRowSelection, - getCoreRowModel: getCoreRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), - debugTable: true - }) - - return { table, setData } -} - -function IndeterminateCheckbox({ - indeterminate, - className = '', - ...rest -}: { indeterminate?: boolean } & HTMLProps) { - const ref = useRef(null) - - useEffect(() => { - if (typeof indeterminate === 'boolean') { - if (ref.current) { - ref.current.indeterminate = !rest.checked && indeterminate - } - } - }, [ref, indeterminate, rest.checked]) - - return -} From 04dad92cb04e44c9353f0ac384509e077d386e32 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 26 Jun 2023 18:46:07 +0200 Subject: [PATCH 04/30] feat(DatasetFiles): add FileThumbnail component --- src/files/domain/models/File.ts | 34 +++++++++---- .../FilesTableColumnsDefinition.tsx | 5 +- .../file-info-cell/FileInfoCell.module.scss | 39 +++++++++++++++ .../file-info-cell/FileInfoCell.tsx | 38 ++++++++++++++ .../file-thumbnail/FileThumbnail.tsx | 23 +++++++++ .../file-thumbnail/FileThumbnailIcon.tsx | 32 ++++++++++++ .../FileThumbnailPreviewImage.tsx | 14 ++++++ .../FileThumbnailRestrictedIcon.tsx | 18 +++++++ src/stories/files/FileMockData.ts | 21 ++------ .../files/domain/models/FileMother.ts | 41 ++++++++++++++++ .../file-thumbnail/FileThumbnail.spec.tsx | 49 +++++++++++++++++++ 11 files changed, 285 insertions(+), 29 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailIcon.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailPreviewImage.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx create mode 100644 tests/component/files/domain/models/FileMother.ts create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-thumbnail/FileThumbnail.spec.tsx diff --git a/src/files/domain/models/File.ts b/src/files/domain/models/File.ts index 6a5269a08..15f2b8116 100644 --- a/src/files/domain/models/File.ts +++ b/src/files/domain/models/File.ts @@ -1,10 +1,26 @@ -export type File = { - name: string - link: string - thumbnail: string - type: string - size: number - publicationDate: string - downloads: number - checksum: string +export class FileSize { + constructor(readonly value: number, readonly unit: string) {} + + toString(): string { + return `${this.value} ${this.unit}` + } +} + +export interface FileAccess { + restricted: boolean + canDownload: boolean +} + +export class File { + constructor( + readonly name: string, + readonly access: FileAccess, + readonly link: string, + readonly type: string, + readonly size: FileSize, + readonly publicationDate: string, + readonly downloads: number, + readonly checksum: string, + readonly thumbnail?: string + ) {} } diff --git a/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx index 511895f0b..bad4ff109 100644 --- a/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx +++ b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx @@ -1,6 +1,7 @@ import { ColumnDef } from '@tanstack/react-table' import { File } from '../../../../files/domain/models/File' import { IndeterminateCheckbox } from './IndeterminateCheckbox' +import { FileInfoCell } from './file-info-cell/FileInfoCell' export const columns: ColumnDef[] = [ { @@ -29,8 +30,8 @@ export const columns: ColumnDef[] = [ }, { header: 'Files', - accessorKey: 'name', - cell: (info) => info.getValue(), + accessorKey: 'info', + cell: (props) => , footer: (props) => props.column.id } ] diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss new file mode 100644 index 000000000..2a6b49e17 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss @@ -0,0 +1,39 @@ +@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/typography.module"; +@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/colors.module"; + +.container { +display: flex; +} + +.thumbnail { + max-width: 64px; + max-height: 64px; + + &__icon, + &__locked, + &__unlocked { + font-size: 64px; + } + + &__icon { + color: $dv-subtext-color; + } + + &__locked { + color: $dv-danger-color; + } + + &__unlocked { + color: $dv-success-color; + } +} + +.info-container { + padding-left: 10px; + + &__body { + color: $dv-subtext-color; + font-size: $dv-font-size-sm; + } +} + diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx new file mode 100644 index 000000000..b0b21dd81 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx @@ -0,0 +1,38 @@ +import { File } from '../../../../../files/domain/models/File' +import { ClipboardPlusFill } from 'react-bootstrap-icons' +import styles from './FileInfoCell.module.scss' +import { FileThumbnail } from './file-thumbnail/FileThumbnail' + +export function FileInfoCell({ file }: { file: File }) { + return ( +
+ +
+ {file.name} +
+
+ + {file.type} - {file.size.toString()} + +
+
+ Published {file.publicationDate} +
+
+ {file.downloads} Downloads +
+
+ + {file.checksum} + +
+
+
+
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.tsx new file mode 100644 index 000000000..9a6eaa224 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.tsx @@ -0,0 +1,23 @@ +import { FileThumbnailIcon } from './FileThumbnailIcon' +import { FileThumbnailPreviewImage } from './FileThumbnailPreviewImage' +import { FileAccess } from '../../../../../../files/domain/models/File' +import { FileThumbnailRestrictedIcon } from './FileThumbnailRestrictedIcon' + +interface FileThumbnailProps { + thumbnail?: string | undefined + name: string + type: string + access: FileAccess +} + +export function FileThumbnail({ thumbnail, name, type, access }: FileThumbnailProps) { + if (access.restricted) { + return + } + + if (thumbnail) { + return + } + + return +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailIcon.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailIcon.tsx new file mode 100644 index 000000000..9f62a7880 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailIcon.tsx @@ -0,0 +1,32 @@ +import styles from '../FileInfoCell.module.scss' +import { Icon } from 'dataverse-design-system' + +const TYPE_TO_ICON: Record = { + archive: Icon.PACKAGE, + video: Icon.VIDEO, + audio: Icon.AUDIO, + code: Icon.CODE, + data: Icon.TABULAR, + network: Icon.NETWORK, + astro: Icon.ASTRO, + image: Icon.IMAGE, + document: Icon.DOCUMENT, + geospatial: Icon.GEODATA, + tabular: Icon.TABULAR, + text: Icon.DOCUMENT, + unknown: Icon.FILE, + default: Icon.FILE, + other: Icon.OTHER +} + +export function FileThumbnailIcon({ type }: { type: string }) { + const icon = TYPE_TO_ICON[type] || TYPE_TO_ICON.default + + return ( +
+ + {icon} + +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailPreviewImage.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailPreviewImage.tsx new file mode 100644 index 000000000..aa828df16 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailPreviewImage.tsx @@ -0,0 +1,14 @@ +import styles from '../FileInfoCell.module.scss' + +interface FileThumbnailPreviewImageProps { + thumbnail: string + name: string +} + +export function FileThumbnailPreviewImage({ thumbnail, name }: FileThumbnailPreviewImageProps) { + return ( +
+ {name} +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx new file mode 100644 index 000000000..6bf35f640 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx @@ -0,0 +1,18 @@ +import { Lock, Unlock } from 'react-bootstrap-icons' +import styles from '../FileInfoCell.module.scss' + +export function FileThumbnailRestrictedIcon({ locked }: { locked: boolean }) { + if (locked) { + return ( +
+ +
+ ) + } + + return ( +
+ +
+ ) +} diff --git a/src/stories/files/FileMockData.ts b/src/stories/files/FileMockData.ts index 1a3506339..5d26e8187 100644 --- a/src/stories/files/FileMockData.ts +++ b/src/stories/files/FileMockData.ts @@ -1,5 +1,5 @@ -import { faker } from '@faker-js/faker' import { File } from '../../files/domain/models/File' +import { FileMother } from '../../../tests/component/files/domain/models/FileMother' const range = (len: number) => { const arr = [] @@ -9,25 +9,10 @@ const range = (len: number) => { return arr } -const newFile = (): File => { - return { - name: faker.system.fileName(), - link: faker.internet.url(), - thumbnail: faker.image.imageUrl(), - type: faker.system.fileType(), - size: faker.datatype.number(40), - publicationDate: faker.date.recent().toISOString(), - downloads: faker.datatype.number(40), - checksum: faker.datatype.uuid() - } -} - export function makeFiles(len: number): File[] { return range(len).map(() => { - return { - ...newFile() - } + return FileMother.create() }) } -export const FilesMockData = (): File[] => makeFiles(100) +export const FilesMockData = (): File[] => makeFiles(20) diff --git a/tests/component/files/domain/models/FileMother.ts b/tests/component/files/domain/models/FileMother.ts new file mode 100644 index 000000000..8995fd05a --- /dev/null +++ b/tests/component/files/domain/models/FileMother.ts @@ -0,0 +1,41 @@ +import { faker } from '@faker-js/faker' +import { File, FileSize } from '../../../../../src/files/domain/models/File' + +const fileSizeUnits = ['B', 'KB', 'MB', 'GB'] + +const imageOrUndefined: () => string | undefined = () => { + const shouldGenerateImage = faker.datatype.boolean() + return shouldGenerateImage ? faker.image.imageUrl() : undefined +} + +export class FileMother { + static create(props?: Partial): File { + const fileMockedData = { + name: faker.system.fileName(), + access: { restricted: faker.datatype.boolean(), canDownload: faker.datatype.boolean() }, + link: `file.xhtml?fileId=${faker.datatype.uuid()}`, + type: faker.system.fileType(), + size: { + value: faker.datatype.number({ max: 1024, precision: 2 }), + unit: faker.helpers.arrayElement(fileSizeUnits) + }, + publicationDate: faker.date.recent().toISOString(), + downloads: faker.datatype.number(40), + checksum: faker.datatype.uuid(), + thumbnail: imageOrUndefined(), + ...props + } + + return new File( + fileMockedData.name, + fileMockedData.access, + fileMockedData.link, + fileMockedData.type, + new FileSize(fileMockedData.size.value, fileMockedData.size.unit), + fileMockedData.publicationDate, + fileMockedData.downloads, + fileMockedData.checksum, + fileMockedData.thumbnail + ) + } +} diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-thumbnail/FileThumbnail.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-thumbnail/FileThumbnail.spec.tsx new file mode 100644 index 000000000..0c4f8acd2 --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-thumbnail/FileThumbnail.spec.tsx @@ -0,0 +1,49 @@ +import { render } from '@testing-library/react' +import { FileThumbnail } from '../../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail' +import { FileMother } from '../../../../../../files/domain/models/FileMother' + +describe('FileThumbnail', () => { + it('renders FileThumbnailRestrictedIcon when access is restricted', () => { + const file = FileMother.create({ access: { restricted: true, canDownload: false } }) + + cy.customMount( + + ) + + cy.findByText('Locked File Icon').should('exist') + }) + + it('renders FileThumbnailPreviewImage when thumbnail is provided', () => { + const file = FileMother.create({ + access: { restricted: false, canDownload: true }, + thumbnail: 'thumbnail' + }) + + cy.customMount( + + ) + + cy.findByAltText(file.name).should('exist') + }) + + it('renders FileThumbnailIcon when thumbnail is not provided', () => { + const file = FileMother.create({ + type: 'some-type', + access: { restricted: false, canDownload: true } + }) + + cy.customMount() + + cy.findByText('icon-file').should('exist') + }) +}) From ab9cb03c9b0a728c6d0f90c79e3208a8843542cf Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 27 Jun 2023 10:58:14 +0200 Subject: [PATCH 05/30] feat(DatasetFiles): add FileTitle component to table --- src/files/domain/models/File.ts | 15 ++++++++++- .../file-info-cell/FileInfoCell.module.scss | 23 ----------------- .../file-info-cell/FileInfoCell.tsx | 3 ++- .../file-thumbnail/FileThumbnail.module.scss | 25 +++++++++++++++++++ .../file-thumbnail/FileThumbnailIcon.tsx | 2 +- .../FileThumbnailPreviewImage.tsx | 2 +- .../FileThumbnailRestrictedIcon.tsx | 2 +- .../file-info-cell/file-title/FileTitle.tsx | 8 ++++++ .../files/domain/models/FileMother.ts | 8 +++--- .../file-thumbnail/FileThumbnail.spec.tsx | 1 - .../file-title/FileTitle.spec.tsx | 23 +++++++++++++++++ 11 files changed, 80 insertions(+), 32 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/file-title/FileTitle.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-title/FileTitle.spec.tsx diff --git a/src/files/domain/models/File.ts b/src/files/domain/models/File.ts index 15f2b8116..f216adf1e 100644 --- a/src/files/domain/models/File.ts +++ b/src/files/domain/models/File.ts @@ -11,11 +11,20 @@ export interface FileAccess { canDownload: boolean } +export class FileVersion { + constructor(public readonly majorNumber: number, public readonly minorNumber: number) {} + + toString(): string { + return `${this.majorNumber}.${this.minorNumber}` + } +} + export class File { constructor( + readonly id: string, + readonly version: FileVersion, readonly name: string, readonly access: FileAccess, - readonly link: string, readonly type: string, readonly size: FileSize, readonly publicationDate: string, @@ -23,4 +32,8 @@ export class File { readonly checksum: string, readonly thumbnail?: string ) {} + + getLink(): string { + return `/file?id=${this.id}&version=${this.version.toString()}` + } } diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss index 2a6b49e17..9e2fab681 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss @@ -5,29 +5,6 @@ display: flex; } -.thumbnail { - max-width: 64px; - max-height: 64px; - - &__icon, - &__locked, - &__unlocked { - font-size: 64px; - } - - &__icon { - color: $dv-subtext-color; - } - - &__locked { - color: $dv-danger-color; - } - - &__unlocked { - color: $dv-success-color; - } -} - .info-container { padding-left: 10px; diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx index b0b21dd81..0298613a3 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx @@ -2,6 +2,7 @@ import { File } from '../../../../../files/domain/models/File' import { ClipboardPlusFill } from 'react-bootstrap-icons' import styles from './FileInfoCell.module.scss' import { FileThumbnail } from './file-thumbnail/FileThumbnail' +import { FileTitle } from './file-title/FileTitle' export function FileInfoCell({ file }: { file: File }) { return ( @@ -13,7 +14,7 @@ export function FileInfoCell({ file }: { file: File }) { type={file.type} />
- {file.name} +
diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss new file mode 100644 index 000000000..cf67560a1 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss @@ -0,0 +1,25 @@ +@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/typography.module"; +@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/colors.module"; + +.thumbnail { + max-width: 64px; + max-height: 64px; + + &__icon, + &__locked, + &__unlocked { + font-size: 64px; + } + + &__icon { + color: $dv-subtext-color; + } + + &__locked { + color: $dv-danger-color; + } + + &__unlocked { + color: $dv-success-color; + } +} \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailIcon.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailIcon.tsx index 9f62a7880..17ed516e6 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailIcon.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailIcon.tsx @@ -1,4 +1,4 @@ -import styles from '../FileInfoCell.module.scss' +import styles from './FileThumbnail.module.scss' import { Icon } from 'dataverse-design-system' const TYPE_TO_ICON: Record = { diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailPreviewImage.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailPreviewImage.tsx index aa828df16..3e4c1bde0 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailPreviewImage.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailPreviewImage.tsx @@ -1,4 +1,4 @@ -import styles from '../FileInfoCell.module.scss' +import styles from './FileThumbnail.module.scss' interface FileThumbnailPreviewImageProps { thumbnail: string diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx index 6bf35f640..59103ca6b 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx @@ -1,5 +1,5 @@ import { Lock, Unlock } from 'react-bootstrap-icons' -import styles from '../FileInfoCell.module.scss' +import styles from './FileThumbnail.module.scss' export function FileThumbnailRestrictedIcon({ locked }: { locked: boolean }) { if (locked) { diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-title/FileTitle.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-title/FileTitle.tsx new file mode 100644 index 000000000..40e9aa172 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-title/FileTitle.tsx @@ -0,0 +1,8 @@ +interface FileTitleProps { + link: string + name: string +} + +export function FileTitle({ link, name }: FileTitleProps) { + return {name} +} diff --git a/tests/component/files/domain/models/FileMother.ts b/tests/component/files/domain/models/FileMother.ts index 8995fd05a..c2b7aaaf6 100644 --- a/tests/component/files/domain/models/FileMother.ts +++ b/tests/component/files/domain/models/FileMother.ts @@ -1,5 +1,5 @@ import { faker } from '@faker-js/faker' -import { File, FileSize } from '../../../../../src/files/domain/models/File' +import { File, FileSize, FileVersion } from '../../../../../src/files/domain/models/File' const fileSizeUnits = ['B', 'KB', 'MB', 'GB'] @@ -11,9 +11,10 @@ const imageOrUndefined: () => string | undefined = () => { export class FileMother { static create(props?: Partial): File { const fileMockedData = { + id: faker.datatype.uuid(), name: faker.system.fileName(), access: { restricted: faker.datatype.boolean(), canDownload: faker.datatype.boolean() }, - link: `file.xhtml?fileId=${faker.datatype.uuid()}`, + version: { majorNumber: faker.datatype.number(), minorNumber: faker.datatype.number() }, type: faker.system.fileType(), size: { value: faker.datatype.number({ max: 1024, precision: 2 }), @@ -27,9 +28,10 @@ export class FileMother { } return new File( + fileMockedData.id, + new FileVersion(fileMockedData.version.majorNumber, fileMockedData.version.minorNumber), fileMockedData.name, fileMockedData.access, - fileMockedData.link, fileMockedData.type, new FileSize(fileMockedData.size.value, fileMockedData.size.unit), fileMockedData.publicationDate, diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-thumbnail/FileThumbnail.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-thumbnail/FileThumbnail.spec.tsx index 0c4f8acd2..9779600a4 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-thumbnail/FileThumbnail.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-thumbnail/FileThumbnail.spec.tsx @@ -1,4 +1,3 @@ -import { render } from '@testing-library/react' import { FileThumbnail } from '../../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail' import { FileMother } from '../../../../../../files/domain/models/FileMother' diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-title/FileTitle.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-title/FileTitle.spec.tsx new file mode 100644 index 000000000..fe983d49e --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-title/FileTitle.spec.tsx @@ -0,0 +1,23 @@ +import { FileMother } from '../../../../../../files/domain/models/FileMother' +import { FileTitle } from '../../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/file-title/FileTitle' + +describe('FileTitle', () => { + it('renders the link and name correctly', () => { + const id = '12345' + const versionParameter = '&version=1.0' + const name = 'file-name.txt' + const file = FileMother.create({ + id: id, + version: { majorNumber: 1, minorNumber: 0 }, + name: name + }) + + cy.customMount() + + cy.findByRole('link', { name: name }).should( + 'have.attr', + 'href', + `/file?id=${id}${versionParameter}` + ) + }) +}) From 203c1ecbf195379363559ab4e5c3d93f3710aa82 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Wed, 28 Jun 2023 14:51:12 +0200 Subject: [PATCH 06/30] feat(DatasetFiles): complete FileInfoCell with all the file info --- .../overlay-trigger/OverlayTrigger.tsx | 1 + packages/design-system/src/lib/index.ts | 1 + public/locales/en/files.json | 8 ++ src/files/domain/models/File.ts | 64 ++++++++++++-- .../file-info-cell/FileChecksum.tsx | 15 ++++ .../files-table/file-info-cell/FileDate.tsx | 13 +++ .../file-info-cell/FileDescription.tsx | 8 ++ .../file-info-cell/FileDirectory.tsx | 10 +++ .../file-info-cell/FileDownloads.tsx | 17 ++++ .../file-info-cell/FileEmbargoDate.tsx | 31 +++++++ .../file-info-cell/FileInfoCell.module.scss | 21 ++++- .../file-info-cell/FileInfoCell.tsx | 41 ++++----- .../files-table/file-info-cell/FileLabels.tsx | 20 +++++ .../file-info-cell/FileTabularData.tsx | 18 ++++ .../{file-title => }/FileTitle.tsx | 0 .../files-table/file-info-cell/FileType.tsx | 23 +++++ .../CopyToClipboard.module.scss | 11 +++ .../CopyToClipboardButton.tsx | 32 +++++++ .../file-thumbnail/FileThumbnail.module.scss | 8 +- .../files/domain/models/FileMother.ts | 83 +++++++++++++++---- .../files-info-cell/FileChecksum.spec.tsx | 18 ++++ .../files-info-cell/FileDate.spec.tsx | 10 +++ .../files-info-cell/FileDescription.spec.tsx | 17 ++++ .../files-info-cell/FileDirectory.spec.tsx | 16 ++++ .../files-info-cell/FileDownloads.spec.tsx | 20 +++++ .../files-info-cell/FileEmbargoDate.spec.tsx | 50 +++++++++++ .../files-info-cell/FileLabels.spec.tsx | 23 +++++ .../files-info-cell/FileTabularData.spec.tsx | 22 +++++ .../{file-title => }/FileTitle.spec.tsx | 7 +- .../files-info-cell/FileType.spec.tsx | 18 ++++ .../CopyToClipboardButton.spec.tsx | 26 ++++++ 31 files changed, 605 insertions(+), 47 deletions(-) create mode 100644 public/locales/en/files.json create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileChecksum.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileDate.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileDescription.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileDirectory.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileDownloads.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileEmbargoDate.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileLabels.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileTabularData.tsx rename src/sections/dataset/dataset-files/files-table/file-info-cell/{file-title => }/FileTitle.tsx (100%) create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/FileType.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboard.module.scss create mode 100644 src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboardButton.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileChecksum.spec.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDate.spec.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDescription.spec.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDirectory.spec.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDownloads.spec.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileEmbargoDate.spec.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileLabels.spec.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileTabularData.spec.tsx rename tests/component/sections/dataset/dataset-files/files-table/files-info-cell/{file-title => }/FileTitle.spec.tsx (57%) create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileType.spec.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx diff --git a/packages/design-system/src/lib/components/tooltip/overlay-trigger/OverlayTrigger.tsx b/packages/design-system/src/lib/components/tooltip/overlay-trigger/OverlayTrigger.tsx index dcf03b688..f46b63e2d 100644 --- a/packages/design-system/src/lib/components/tooltip/overlay-trigger/OverlayTrigger.tsx +++ b/packages/design-system/src/lib/components/tooltip/overlay-trigger/OverlayTrigger.tsx @@ -7,6 +7,7 @@ interface OverlayTriggerProps { message: string children: ReactElement } + export function OverlayTrigger({ placement, message, children }: OverlayTriggerProps) { return ( + } + + return ( +
+ {checksum} + +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDate.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDate.tsx new file mode 100644 index 000000000..e32f240a0 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDate.tsx @@ -0,0 +1,13 @@ +import { FileDate as FileDateModel } from '../../../../../files/domain/models/File' +import { useTranslation } from 'react-i18next' + +export function FileDate({ date }: { date: FileDateModel }) { + const { t } = useTranslation('files') + return ( +
+ + {t(date.type)} {date.date} + +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDescription.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDescription.tsx new file mode 100644 index 000000000..431dc1b20 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDescription.tsx @@ -0,0 +1,8 @@ +import styles from './FileInfoCell.module.scss' + +export function FileDescription({ description }: { description: string | undefined }) { + if (!description) { + return <> + } + return
{description}
+} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDirectory.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDirectory.tsx new file mode 100644 index 000000000..812357e27 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDirectory.tsx @@ -0,0 +1,10 @@ +export function FileDirectory({ directory }: { directory: string | undefined }) { + if (!directory) { + return <> + } + return ( +
+ {directory} +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDownloads.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDownloads.tsx new file mode 100644 index 000000000..51f84f13d --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDownloads.tsx @@ -0,0 +1,17 @@ +import { FileStatus } from '../../../../../files/domain/models/File' + +interface FileDownloadsProps { + downloads: number + status: FileStatus +} +export function FileDownloads({ downloads, status }: FileDownloadsProps) { + if (status !== FileStatus.RELEASED) { + return <> + } + + return ( +
+ {downloads} Downloads +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileEmbargoDate.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileEmbargoDate.tsx new file mode 100644 index 000000000..02ec72bc6 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileEmbargoDate.tsx @@ -0,0 +1,31 @@ +import { FileEmbargo, FileStatus } from '../../../../../files/domain/models/File' +import { useTranslation } from 'react-i18next' + +interface FileEmbargoDateProps { + embargo: FileEmbargo | undefined + status: FileStatus +} + +export function FileEmbargoDate({ embargo, status }: FileEmbargoDateProps) { + const { t } = useTranslation('files') + + if (!embargo) { + return <> + } + + return ( +
+ + {t(embargoTypeOfDate(embargo.active, status))} {embargo.date} + +
+ ) +} + +const embargoTypeOfDate = (embargoIsActive: boolean, status: FileStatus) => { + if (status === FileStatus.RELEASED) { + return embargoIsActive ? 'embargoedUntil' : 'embargoedWasThrough' + } + + return 'embargoedWillBeUntil' +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss index 9e2fab681..5c057dd5f 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss @@ -5,12 +5,27 @@ display: flex; } -.info-container { +.body-container { padding-left: 10px; - &__body { - color: $dv-subtext-color; + &__subtext { font-size: $dv-font-size-sm; + color: $dv-subtext-color; + } } +.checksum-container { + min-height: 20px; + display: flex; + align-items: center; +} + +.description-container { + font-size: $dv-font-size-sm; + color: $dv-text-color; +} + +.labels-container >*{ + margin-right: 0.5em;; +} \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx index 0298613a3..2aecb74fd 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.tsx @@ -1,8 +1,16 @@ import { File } from '../../../../../files/domain/models/File' -import { ClipboardPlusFill } from 'react-bootstrap-icons' import styles from './FileInfoCell.module.scss' import { FileThumbnail } from './file-thumbnail/FileThumbnail' -import { FileTitle } from './file-title/FileTitle' +import { FileTitle } from './FileTitle' +import { FileDirectory } from './FileDirectory' +import { FileType } from './FileType' +import { FileDate } from './FileDate' +import { FileEmbargoDate } from './FileEmbargoDate' +import { FileDownloads } from './FileDownloads' +import { FileChecksum } from './FileChecksum' +import { FileTabularData } from './FileTabularData' +import { FileDescription } from './FileDescription' +import { FileLabels } from './FileLabels' export function FileInfoCell({ file }: { file: File }) { return ( @@ -13,26 +21,19 @@ export function FileInfoCell({ file }: { file: File }) { access={file.access} type={file.type} /> -
+
-
-
- - {file.type} - {file.size.toString()} - -
-
- Published {file.publicationDate} -
-
- {file.downloads} Downloads -
-
- - {file.checksum} - -
+
+ + + + + + +
+ +
) diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileLabels.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileLabels.tsx new file mode 100644 index 000000000..5daf5e5c5 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileLabels.tsx @@ -0,0 +1,20 @@ +import { FileLabel, FileLabelType } from '../../../../../files/domain/models/File' +import { Badge } from 'dataverse-design-system' +import styles from './FileInfoCell.module.scss' + +const VARIANT_BY_LABEL_TYPE: Record = { + [FileLabelType.CATEGORY]: 'secondary', + [FileLabelType.TAG]: 'info' +} + +export function FileLabels({ labels }: { labels: FileLabel[] }) { + return ( +
+ {labels.map((label, index) => ( + + {label.value} + + ))} +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileTabularData.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileTabularData.tsx new file mode 100644 index 000000000..b69843e82 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileTabularData.tsx @@ -0,0 +1,18 @@ +import { FileTabularData as FileTabularDataModel } from '../../../../../files/domain/models/File' +import { CopyToClipboardButton } from './copy-to-clipboard-button/CopyToClipboardButton' + +export function FileTabularData({ + tabularData +}: { + tabularData: FileTabularDataModel | undefined +}) { + if (!tabularData) { + return <> + } + return ( +
+ {tabularData.variablesCount} Variables, {tabularData.observationsCount} Observations{' '} + {tabularData.unf} +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-title/FileTitle.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileTitle.tsx similarity index 100% rename from src/sections/dataset/dataset-files/files-table/file-info-cell/file-title/FileTitle.tsx rename to src/sections/dataset/dataset-files/files-table/file-info-cell/FileTitle.tsx diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileType.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileType.tsx new file mode 100644 index 000000000..70b196279 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileType.tsx @@ -0,0 +1,23 @@ +import { FileSize } from '../../../../../files/domain/models/File' + +interface FileTypeProps { + type: string + size: FileSize +} + +export function FileType({ type, size }: FileTypeProps) { + return ( +
+ + {capitalizeFirstLetter(type)} - {size.toString()} + +
+ ) +} + +function capitalizeFirstLetter(str: string): string { + if (str.length === 0) { + return str + } + return str.charAt(0).toUpperCase() + str.slice(1) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboard.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboard.module.scss new file mode 100644 index 000000000..1efffcf49 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboard.module.scss @@ -0,0 +1,11 @@ +@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/colors.module"; + +.container { + margin-left: 5px; + cursor: pointer; +} + +.check { + color: $dv-success-color; + font-size: 20px; +} \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboardButton.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboardButton.tsx new file mode 100644 index 000000000..5a3abd79d --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboardButton.tsx @@ -0,0 +1,32 @@ +import { Check, ClipboardPlusFill } from 'react-bootstrap-icons' +import { OverlayTrigger } from 'dataverse-design-system' +import { useState } from 'react' +import styles from './CopyToClipboard.module.scss' + +export function CopyToClipboardButton({ text }: { text: string }) { + const [copied, setCopied] = useState(false) + const copyToClipboard = () => { + navigator.clipboard + .writeText(text) + .then(() => { + setCopied(true) + setTimeout(() => setCopied(false), 2000) + console.log('Text copied to clipboard!') + }) + .catch((error) => { + console.error('Failed to copy text:', error) + }) + } + + return ( + + + {copied ? ( + + ) : ( + + )} + + + ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss index cf67560a1..ccbe5b1aa 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss @@ -22,4 +22,10 @@ &__unlocked { color: $dv-success-color; } -} \ No newline at end of file +} + +.preview { + width: 400px; + height: 400px; + padding: 30px; +} diff --git a/tests/component/files/domain/models/FileMother.ts b/tests/component/files/domain/models/FileMother.ts index c2b7aaaf6..26f46ea55 100644 --- a/tests/component/files/domain/models/FileMother.ts +++ b/tests/component/files/domain/models/FileMother.ts @@ -1,43 +1,96 @@ import { faker } from '@faker-js/faker' -import { File, FileSize, FileVersion } from '../../../../../src/files/domain/models/File' +import { + File, + FileDateType, + FileEmbargo, + FileLabel, + FileLabelType, + FileSize, + FileSizeUnit, + FileStatus, + FileVersion +} from '../../../../../src/files/domain/models/File' -const fileSizeUnits = ['B', 'KB', 'MB', 'GB'] - -const imageOrUndefined: () => string | undefined = () => { - const shouldGenerateImage = faker.datatype.boolean() - return shouldGenerateImage ? faker.image.imageUrl() : undefined +const valueOrUndefined: (value: T) => T | undefined = (value) => { + const shouldShowValue = faker.datatype.boolean() + return shouldShowValue ? value : undefined } +const createFakeFileLabel = (): FileLabel => ({ + type: faker.helpers.arrayElement(Object.values(FileLabelType)), + value: faker.lorem.word() +}) + export class FileMother { static create(props?: Partial): File { + const fileType = faker.helpers.arrayElement(['tabular data', faker.system.fileType()]) + const checksum = valueOrUndefined(faker.datatype.uuid()) const fileMockedData = { id: faker.datatype.uuid(), name: faker.system.fileName(), access: { restricted: faker.datatype.boolean(), canDownload: faker.datatype.boolean() }, - version: { majorNumber: faker.datatype.number(), minorNumber: faker.datatype.number() }, - type: faker.system.fileType(), + version: { + majorNumber: faker.datatype.number(), + minorNumber: faker.datatype.number(), + status: faker.helpers.arrayElement(Object.values(FileStatus)) + }, + type: fileType, size: { value: faker.datatype.number({ max: 1024, precision: 2 }), - unit: faker.helpers.arrayElement(fileSizeUnits) + unit: faker.helpers.arrayElement(Object.values(FileSizeUnit)) + }, + date: { + type: faker.helpers.arrayElement(Object.values(FileDateType)), + date: faker.date.recent().toDateString() }, - publicationDate: faker.date.recent().toISOString(), downloads: faker.datatype.number(40), - checksum: faker.datatype.uuid(), - thumbnail: imageOrUndefined(), + labels: faker.datatype.boolean() + ? faker.helpers.arrayElements([ + createFakeFileLabel(), + createFakeFileLabel(), + createFakeFileLabel(), + createFakeFileLabel() + ]) + : [], + checksum: checksum, + thumbnail: valueOrUndefined(faker.image.imageUrl()), + directory: valueOrUndefined(faker.system.directoryPath()), + embargo: valueOrUndefined({ + active: faker.datatype.boolean(), + date: faker.date.recent().toDateString() + }), + tabularData: + fileType === 'tabular data' && !checksum + ? { + variablesCount: faker.datatype.number(100), + observationsCount: faker.datatype.number(100), + unf: `UNF:${faker.datatype.uuid()}==` + } + : undefined, + description: valueOrUndefined(faker.lorem.paragraph()), ...props } return new File( fileMockedData.id, - new FileVersion(fileMockedData.version.majorNumber, fileMockedData.version.minorNumber), + new FileVersion( + fileMockedData.version.majorNumber, + fileMockedData.version.minorNumber, + fileMockedData.version.status + ), fileMockedData.name, fileMockedData.access, fileMockedData.type, new FileSize(fileMockedData.size.value, fileMockedData.size.unit), - fileMockedData.publicationDate, + fileMockedData.date, fileMockedData.downloads, + fileMockedData.labels, fileMockedData.checksum, - fileMockedData.thumbnail + fileMockedData.thumbnail, + fileMockedData.directory, + fileMockedData.embargo, + fileMockedData.tabularData, + fileMockedData.description ) } } diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileChecksum.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileChecksum.spec.tsx new file mode 100644 index 000000000..6095b8af9 --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileChecksum.spec.tsx @@ -0,0 +1,18 @@ +import { FileChecksum } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileChecksum' +import styles from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss' + +describe('FileChecksum', () => { + it('renders the checksum and CopyToClipboardButton when checksum is provided', () => { + const checksum = 'ABC123' + cy.customMount() + + cy.findByText(checksum).should('exist') + cy.findByRole('button', { name: 'Copy to clipboard icon' }).should('exist') + }) + + it('renders an empty fragment when checksum is not provided', () => { + cy.customMount() + + cy.get(styles['checksum-container']).should('not.exist') + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDate.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDate.spec.tsx new file mode 100644 index 000000000..735c6c475 --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDate.spec.tsx @@ -0,0 +1,10 @@ +import { FileDate } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileDate' +import { FileDateType } from '../../../../../../../src/files/domain/models/File' +describe('FileDate', () => { + it('renders the date', () => { + const date = { type: FileDateType.PUBLISHED, date: '2021-01-01' } + cy.customMount() + + cy.findByText(`Published ${date.date}`).should('exist') + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDescription.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDescription.spec.tsx new file mode 100644 index 000000000..736d94a09 --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDescription.spec.tsx @@ -0,0 +1,17 @@ +import styles from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss' +import { FileDescription } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileDescription' + +describe('FileDescription', () => { + it('renders the file description when a description is provided', () => { + const description = 'This is a file description' + cy.customMount() + + cy.findByText(description).should('exist') + }) + + it('renders an empty fragment when description is not provided', () => { + cy.customMount() + + cy.get(styles['description-container']).should('not.exist') + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDirectory.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDirectory.spec.tsx new file mode 100644 index 000000000..d9eb19c89 --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDirectory.spec.tsx @@ -0,0 +1,16 @@ +import { FileDirectory } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileDirectory' + +describe('FileDirectory', () => { + it('renders nothing when directory is undefined', () => { + cy.customMount() + + cy.get('.directory-container').should('not.exist') + }) + + it('renders the directory when directory is provided', () => { + const directory = 'example/directory' + cy.customMount() + + cy.findByText(directory).should('exist') + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDownloads.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDownloads.spec.tsx new file mode 100644 index 000000000..baa001edd --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileDownloads.spec.tsx @@ -0,0 +1,20 @@ +import { FileStatus } from '../../../../../../../src/files/domain/models/File' +import { FileDownloads } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileDownloads' + +describe('FileDownloads', () => { + it('renders the number of downloads when file is RELEASED', () => { + const downloads = 10 + const status = FileStatus.RELEASED + cy.customMount() + + cy.findByText('10 Downloads').should('exist') + }) + + it('renders an empty fragment when file is not RELEASED', () => { + const downloads = 10 + const status = FileStatus.DRAFT + cy.customMount() + + cy.findByText('10 Downloads').should('not.exist') + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileEmbargoDate.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileEmbargoDate.spec.tsx new file mode 100644 index 000000000..0f54c52fb --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileEmbargoDate.spec.tsx @@ -0,0 +1,50 @@ +import { FileEmbargoDate } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileEmbargoDate' +import { FileStatus } from '../../../../../../../src/files/domain/models/File' + +describe('FileEmbargoDate', () => { + it('renders the embargo date when embargo exists', () => { + const embargo = { + active: true, + date: '2023-06-14' + } + const status = FileStatus.RELEASED + cy.customMount() + + cy.findByText('Embargoed until 2023-06-14').should('exist') + }) + + it('renders the until embargo date when embargo is not active and the file is not released', () => { + const embargo = { + active: false, + date: '2023-06-14' + } + const status = FileStatus.RELEASED + + cy.customMount() + + cy.findByText('Was embargoed until 2023-06-14').should('exist') + }) + + it('renders the draft until embargo date when embargo is active and the file is not released', () => { + const embargo = { + active: true, + date: '2023-06-14' + } + const status = FileStatus.DRAFT + + cy.customMount() + + cy.findByText('Draft: will be embargoed until 2023-06-14').should('exist') + }) + + it('renders an empty fragment when embargo is undefined', () => { + const embargo = undefined + const status = FileStatus.RELEASED + + cy.customMount() + + cy.findByText('Draft: will be embargoed until 2023-06-14').should('not.exist') + cy.findByText('Embargoed until 2023-06-14').should('not.exist') + cy.findByText('Was embargoed until 2023-06-14').should('not.exist') + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileLabels.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileLabels.spec.tsx new file mode 100644 index 000000000..d7c6d8ab8 --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileLabels.spec.tsx @@ -0,0 +1,23 @@ +import { FileLabelType } from '../../../../../../../src/files/domain/models/File' +import { FileLabels } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileLabels' +import styles from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss' + +describe('FileLabels', () => { + it('renders labels with correct variants and values', () => { + const labels = [ + { value: 'Category 1', type: FileLabelType.CATEGORY }, + { value: 'Tag 1', type: FileLabelType.TAG }, + { value: 'Tag 2', type: FileLabelType.TAG } + ] + cy.customMount() + + cy.findByText('Category 1').should('have.class', 'bg-secondary') + cy.findAllByText(/Tag/).should('have.class', 'bg-info') + }) + + it('renders an empty fragment when no labels are provided', () => { + cy.customMount() + + cy.get(styles['labels-container']).should('not.exist') + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileTabularData.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileTabularData.spec.tsx new file mode 100644 index 000000000..7439b9dbd --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileTabularData.spec.tsx @@ -0,0 +1,22 @@ +import { FileTabularData } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileTabularData' +import styles from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss' + +describe('FileTabularData', () => { + it('renders the tabular data and CopyToClipboardButton when tabularData is provided', () => { + const tabularData = { + variablesCount: 10, + observationsCount: 100, + unf: 'ABC123' + } + cy.customMount() + + cy.findByText('10 Variables, 100 Observations ABC123').should('exist') + cy.findByRole('button', { name: 'Copy to clipboard icon' }).should('exist') + }) + + it('renders an empty fragment when tabularData is not provided', () => { + cy.customMount() + + cy.get(styles['checksum-container']).should('not.exist') + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-title/FileTitle.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileTitle.spec.tsx similarity index 57% rename from tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-title/FileTitle.spec.tsx rename to tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileTitle.spec.tsx index fe983d49e..fb96861f6 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/file-title/FileTitle.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileTitle.spec.tsx @@ -1,5 +1,6 @@ -import { FileMother } from '../../../../../../files/domain/models/FileMother' -import { FileTitle } from '../../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/file-title/FileTitle' +import { FileMother } from '../../../../../files/domain/models/FileMother' +import { FileTitle } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileTitle' +import { FileStatus } from '../../../../../../../src/files/domain/models/File' describe('FileTitle', () => { it('renders the link and name correctly', () => { @@ -8,7 +9,7 @@ describe('FileTitle', () => { const name = 'file-name.txt' const file = FileMother.create({ id: id, - version: { majorNumber: 1, minorNumber: 0 }, + version: { majorNumber: 1, minorNumber: 0, status: FileStatus.RELEASED }, name: name }) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileType.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileType.spec.tsx new file mode 100644 index 000000000..13f99017c --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/FileType.spec.tsx @@ -0,0 +1,18 @@ +import { FileMother } from '../../../../../files/domain/models/FileMother' +import { FileType } from '../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/FileType' + +describe('FileType', () => { + it('renders the type and size correctly', () => { + const file = FileMother.create() + cy.customMount() + + cy.findByText(`${capitalizeFirstLetter(file.type)} - ${file.size.toString()}`).should('exist') + }) +}) + +function capitalizeFirstLetter(str: string): string { + if (str.length === 0) { + return str + } + return str.charAt(0).toUpperCase() + str.slice(1) +} diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx new file mode 100644 index 000000000..2dbcf9c51 --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx @@ -0,0 +1,26 @@ +import { CopyToClipboardButton } from '../../../../../../../../src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboardButton' + +describe('CopyToClipboardButton', () => { + it('copies text to clipboard and shows success message when clicked', () => { + const textToCopy = 'Sample text to copy' + cy.customMount() + + cy.window().then((win) => { + cy.stub(win.navigator.clipboard, 'writeText').resolves() + + cy.findByRole('button', { name: 'Copy to clipboard icon' }).click() + + cy.wrap(win.navigator.clipboard.writeText).should('be.calledWith', textToCopy) + + cy.findByRole('img', { name: 'Correctly copied to clipboard icon' }).should('exist') + }) + }) + + it('shows tooltip when hovering over the button', () => { + const textToCopy = 'Sample text to copy' + cy.customMount() + + cy.findByRole('button', { name: 'Copy to clipboard icon' }).trigger('mouseover') + cy.findByText('Click to copy Sample text to copy').should('exist') + }) +}) From b954880e63378f2f410effc66bb78199e3fab6bf Mon Sep 17 00:00:00 2001 From: MellyGray Date: Wed, 28 Jun 2023 16:52:32 +0200 Subject: [PATCH 07/30] feat(DatasetFiles): add tests --- .../FilesTableColumnsDefinition.tsx | 3 +- .../files/domain/models/FileMother.ts | 4 +++ .../dataset-files/DatasetFiles.spec.tsx | 31 +++++++++++++++++++ .../CopyToClipboardButton.spec.tsx | 2 ++ 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx diff --git a/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx index bad4ff109..1fd74b203 100644 --- a/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx +++ b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx @@ -31,7 +31,6 @@ export const columns: ColumnDef[] = [ { header: 'Files', accessorKey: 'info', - cell: (props) => , - footer: (props) => props.column.id + cell: (props) => } ] diff --git a/tests/component/files/domain/models/FileMother.ts b/tests/component/files/domain/models/FileMother.ts index 26f46ea55..9f46e2607 100644 --- a/tests/component/files/domain/models/FileMother.ts +++ b/tests/component/files/domain/models/FileMother.ts @@ -93,4 +93,8 @@ export class FileMother { fileMockedData.description ) } + + static createMany(quantity: number): File[] { + return Array.from({ length: quantity }).map(() => this.create()) + } } diff --git a/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx new file mode 100644 index 000000000..2bcf0e862 --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx @@ -0,0 +1,31 @@ +import { FileMother } from '../../../files/domain/models/FileMother' +import { DatasetFiles } from '../../../../../src/sections/dataset/dataset-files/DatasetFiles' +import { FileRepository } from '../../../../../src/files/domain/repositories/FileRepository' + +const testFiles = FileMother.createMany(10) +const datasetPersistentId = 'test-dataset-persistent-id' +const datasetVersion = 'test-dataset-version' +const fileRepository: FileRepository = {} as FileRepository +describe('DatasetFiles', () => { + beforeEach(() => { + fileRepository.getAllByDatasetPersistentId = cy.stub().resolves(testFiles) + }) + + it('renders the files table', () => { + cy.customMount( + + ) + + cy.findByRole('table').should('exist') + cy.findByRole('columnheader', { name: /Files/ }).should('exist') + cy.get('table > thead > tr > th:nth-child(1) > input[type="checkbox"]').should('exist') + + testFiles.forEach((file) => { + cy.findByText(file.name).should('exist') + }) + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx index 2dbcf9c51..4a438e808 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx @@ -13,6 +13,8 @@ describe('CopyToClipboardButton', () => { cy.wrap(win.navigator.clipboard.writeText).should('be.calledWith', textToCopy) cy.findByRole('img', { name: 'Correctly copied to clipboard icon' }).should('exist') + + cy.findByRole('img', { name: 'Copy to clipboard icon' }).should('exist') }) }) From 0274ca4581eb6d3d4e11880af1a6eee390e1a7b8 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Fri, 30 Jun 2023 15:36:02 +0200 Subject: [PATCH 08/30] feat(DatasetFiles): add pagination to the table --- package-lock.json | 161 +++++++++++++++++- package.json | 1 + .../assets/styles/bootstrap-customized.scss | 2 + .../src/lib/components/grid/Col.tsx | 8 +- .../lib/components/pagination/Pagination.tsx | 21 +++ .../pagination/PaginationEllipsis.tsx | 5 + .../components/pagination/PaginationFirst.tsx | 9 + .../components/pagination/PaginationItem.tsx | 15 ++ .../components/pagination/PaginationLast.tsx | 9 + .../components/pagination/PaginationNext.tsx | 9 + .../components/pagination/PaginationPrev.tsx | 9 + packages/design-system/src/lib/index.ts | 1 + public/locales/en/files.json | 2 +- src/sections/dataset/DatasetSkeleton.tsx | 4 +- .../dataset/dataset-files/DatasetFiles.tsx | 8 +- .../dataset/dataset-files/SpinnerSymbol.tsx | 22 +++ .../files-table/FilesTable.module.scss | 3 + .../dataset-files/files-table/FilesTable.tsx | 25 ++- .../FilesTableColumnsDefinition.tsx | 18 +- .../files-table/FilesTablePagination.tsx | 66 ------- .../files-table/IndeterminateCheckbox.tsx | 3 +- .../file-info-cell/FileInfoCell.module.scss | 6 +- .../table-pagination/PageNumbersButtons.tsx | 33 ++++ .../PageNumbersButtonsWithEllipsis.tsx | 74 ++++++++ .../table-pagination/PageSizeSelector.tsx | 29 ++++ .../TablePagination.module.scss | 14 ++ .../table-pagination/TablePagination.tsx | 45 +++++ src/sections/dataset/dataset-files/index.css | 26 --- src/stories/files/FileMockData.ts | 2 +- .../CopyToClipboardButton.spec.tsx | 1 + .../PageNumbersButtonsWithEllipsis.spec.tsx | 104 +++++++++++ .../TablePaginatioin.spec.tsx | 139 +++++++++++++++ 32 files changed, 747 insertions(+), 127 deletions(-) create mode 100644 packages/design-system/src/lib/components/pagination/Pagination.tsx create mode 100644 packages/design-system/src/lib/components/pagination/PaginationEllipsis.tsx create mode 100644 packages/design-system/src/lib/components/pagination/PaginationFirst.tsx create mode 100644 packages/design-system/src/lib/components/pagination/PaginationItem.tsx create mode 100644 packages/design-system/src/lib/components/pagination/PaginationLast.tsx create mode 100644 packages/design-system/src/lib/components/pagination/PaginationNext.tsx create mode 100644 packages/design-system/src/lib/components/pagination/PaginationPrev.tsx create mode 100644 src/sections/dataset/dataset-files/SpinnerSymbol.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/FilesTable.module.scss delete mode 100644 src/sections/dataset/dataset-files/files-table/FilesTablePagination.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtons.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtonsWithEllipsis.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/table-pagination/PageSizeSelector.tsx create mode 100644 src/sections/dataset/dataset-files/files-table/table-pagination/TablePagination.module.scss create mode 100644 src/sections/dataset/dataset-files/files-table/table-pagination/TablePagination.tsx delete mode 100644 src/sections/dataset/dataset-files/index.css create mode 100644 tests/component/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtonsWithEllipsis.spec.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/table-pagination/TablePaginatioin.spec.tsx diff --git a/package-lock.json b/package-lock.json index c56b00467..abf75499f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "react-bootstrap": "^2.7.2", "react-bootstrap-icons": "^1.10.3", "react-i18next": "^12.1.5", + "react-loader-spinner": "^5.3.4", "react-markdown": "^8.0.7", "react-router-dom": "^6.8.1", "react-topbar-progress-indicator": "^4.1.1", @@ -199,7 +200,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -382,7 +382,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -1019,7 +1018,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2688,6 +2686,29 @@ "node": ">=10.0.0" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", @@ -8898,6 +8919,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-styled-components": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", + "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "lodash": "^4.17.21", + "picomatch": "^2.3.1" + }, + "peerDependencies": { + "styled-components": ">= 2" + } + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -9549,6 +9585,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/can-bind-to-host": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/can-bind-to-host/-/can-bind-to-host-1.1.2.tgz", @@ -10506,6 +10550,14 @@ "node": ">=8" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, "node_modules/css-functions-list": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", @@ -10515,6 +10567,16 @@ "node": ">=12.22" } }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", @@ -14159,6 +14221,19 @@ "integrity": "sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==", "dev": true }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -21776,8 +21851,7 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/pre-commit": { "version": "1.2.2", @@ -22490,6 +22564,25 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, + "node_modules/react-loader-spinner": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-loader-spinner/-/react-loader-spinner-5.3.4.tgz", + "integrity": "sha512-G2vw4ssX+RDZ/vfaeva06yfNqyFViv/u+tVZ3kFLy5TKNlNx2DbuwreBSpRtPespQA+VxinxUJsigwLwG9erOg==", + "dependencies": { + "react-is": "^18.2.0", + "styled-components": "^5.3.5", + "styled-tools": "^1.7.2" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-loader-spinner/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/react-loading-skeleton": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/react-loading-skeleton/-/react-loading-skeleton-3.3.1.tgz", @@ -23794,6 +23887,11 @@ "node": ">=8" } }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -24741,6 +24839,59 @@ "inline-style-parser": "0.1.1" } }, + "node_modules/styled-components": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", + "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/styled-components/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/styled-tools": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/styled-tools/-/styled-tools-1.7.2.tgz", + "integrity": "sha512-IjLxzM20RMwAsx8M1QoRlCG/Kmq8lKzCGyospjtSXt/BTIIcvgTonaxQAsKnBrsZNwhpHzO9ADx5te0h76ILVg==" + }, "node_modules/stylelint": { "version": "15.7.0", "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.7.0.tgz", diff --git a/package.json b/package.json index 74e569099..c4c178629 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "react-bootstrap": "^2.7.2", "react-bootstrap-icons": "^1.10.3", "react-i18next": "^12.1.5", + "react-loader-spinner": "^5.3.4", "react-markdown": "^8.0.7", "react-router-dom": "^6.8.1", "react-topbar-progress-indicator": "^4.1.1", diff --git a/packages/design-system/src/lib/components/assets/styles/bootstrap-customized.scss b/packages/design-system/src/lib/components/assets/styles/bootstrap-customized.scss index 3c1c93d2d..38c441a0f 100644 --- a/packages/design-system/src/lib/components/assets/styles/bootstrap-customized.scss +++ b/packages/design-system/src/lib/components/assets/styles/bootstrap-customized.scss @@ -82,6 +82,8 @@ $breadcrumb-divider: ">"; // Alert @import "bootstrap/scss/alert"; +// Pagination +@import "bootstrap/scss/pagination"; // Navbar diff --git a/packages/design-system/src/lib/components/grid/Col.tsx b/packages/design-system/src/lib/components/grid/Col.tsx index b9c3d8b8a..953a545bb 100644 --- a/packages/design-system/src/lib/components/grid/Col.tsx +++ b/packages/design-system/src/lib/components/grid/Col.tsx @@ -12,10 +12,10 @@ type ColSpec = export interface ColProps extends React.HTMLAttributes { children: ReactNode - xs?: ColSpec - sm?: ColSpec - md?: ColSpec - lg?: ColSpec + xs?: ColSpec | 'auto' + sm?: ColSpec | 'auto' + md?: ColSpec | 'auto' + lg?: ColSpec | 'auto' } export function Col({ children, ...props }: ColProps) { diff --git a/packages/design-system/src/lib/components/pagination/Pagination.tsx b/packages/design-system/src/lib/components/pagination/Pagination.tsx new file mode 100644 index 000000000..e93252726 --- /dev/null +++ b/packages/design-system/src/lib/components/pagination/Pagination.tsx @@ -0,0 +1,21 @@ +import { PropsWithChildren } from 'react' +import { Pagination as PaginationBS } from 'react-bootstrap' +import { PaginationFirst } from './PaginationFirst' +import { PaginationPrev } from './PaginationPrev' +import { PaginationEllipsis } from './PaginationEllipsis' +import { PaginationNext } from './PaginationNext' +import { PaginationLast } from './PaginationLast' +import { PaginationItem } from './PaginationItem' + +function Pagination({ children }: PropsWithChildren) { + return {children} +} + +Pagination.First = PaginationFirst +Pagination.Prev = PaginationPrev +Pagination.Ellipsis = PaginationEllipsis +Pagination.Next = PaginationNext +Pagination.Last = PaginationLast +Pagination.Item = PaginationItem + +export { Pagination } diff --git a/packages/design-system/src/lib/components/pagination/PaginationEllipsis.tsx b/packages/design-system/src/lib/components/pagination/PaginationEllipsis.tsx new file mode 100644 index 000000000..c99050f94 --- /dev/null +++ b/packages/design-system/src/lib/components/pagination/PaginationEllipsis.tsx @@ -0,0 +1,5 @@ +import { Pagination } from 'react-bootstrap' + +export function PaginationEllipsis() { + return +} diff --git a/packages/design-system/src/lib/components/pagination/PaginationFirst.tsx b/packages/design-system/src/lib/components/pagination/PaginationFirst.tsx new file mode 100644 index 000000000..9225a6022 --- /dev/null +++ b/packages/design-system/src/lib/components/pagination/PaginationFirst.tsx @@ -0,0 +1,9 @@ +import { Pagination } from 'react-bootstrap' + +interface PaginationFirstProps { + onClick: () => void + disabled: boolean +} +export function PaginationFirst({ onClick, disabled }: PaginationFirstProps) { + return +} diff --git a/packages/design-system/src/lib/components/pagination/PaginationItem.tsx b/packages/design-system/src/lib/components/pagination/PaginationItem.tsx new file mode 100644 index 000000000..44199ed33 --- /dev/null +++ b/packages/design-system/src/lib/components/pagination/PaginationItem.tsx @@ -0,0 +1,15 @@ +import { Pagination } from 'react-bootstrap' + +interface PaginationItemProps { + pageNumber: number + onClick?: () => void + disabled?: boolean + active?: boolean +} +export function PaginationItem({ pageNumber, onClick, disabled, active }: PaginationItemProps) { + return ( + + {pageNumber} + + ) +} diff --git a/packages/design-system/src/lib/components/pagination/PaginationLast.tsx b/packages/design-system/src/lib/components/pagination/PaginationLast.tsx new file mode 100644 index 000000000..f47848575 --- /dev/null +++ b/packages/design-system/src/lib/components/pagination/PaginationLast.tsx @@ -0,0 +1,9 @@ +import { Pagination } from 'react-bootstrap' + +interface PaginationLastProps { + onClick: () => void + disabled: boolean +} +export function PaginationLast({ onClick, disabled }: PaginationLastProps) { + return +} diff --git a/packages/design-system/src/lib/components/pagination/PaginationNext.tsx b/packages/design-system/src/lib/components/pagination/PaginationNext.tsx new file mode 100644 index 000000000..225e515ff --- /dev/null +++ b/packages/design-system/src/lib/components/pagination/PaginationNext.tsx @@ -0,0 +1,9 @@ +import { Pagination } from 'react-bootstrap' + +interface PaginationNextProps { + onClick: () => void + disabled: boolean +} +export function PaginationNext({ onClick, disabled }: PaginationNextProps) { + return +} diff --git a/packages/design-system/src/lib/components/pagination/PaginationPrev.tsx b/packages/design-system/src/lib/components/pagination/PaginationPrev.tsx new file mode 100644 index 000000000..36b3e1612 --- /dev/null +++ b/packages/design-system/src/lib/components/pagination/PaginationPrev.tsx @@ -0,0 +1,9 @@ +import { Pagination } from 'react-bootstrap' + +interface PaginationPrevProps { + onClick: () => void + disabled: boolean +} +export function PaginationPrev({ onClick, disabled }: PaginationPrevProps) { + return +} diff --git a/packages/design-system/src/lib/index.ts b/packages/design-system/src/lib/index.ts index 16ad230bd..7e02cd795 100644 --- a/packages/design-system/src/lib/index.ts +++ b/packages/design-system/src/lib/index.ts @@ -19,3 +19,4 @@ export { Table } from './components/table/Table' export { Tooltip } from './components/tooltip/Tooltip' export { Icon } from './components/Icon.enum' export { OverlayTrigger } from './components/tooltip/overlay-trigger/OverlayTrigger' +export { Pagination } from './components/pagination/Pagination' diff --git a/public/locales/en/files.json b/public/locales/en/files.json index 19f534525..95a98e619 100644 --- a/public/locales/en/files.json +++ b/public/locales/en/files.json @@ -3,6 +3,6 @@ "published": "Published", "deposited": "Deposited", "embargoedWillBeUntil": "Draft: will be embargoed until", - "embargoedUntil" : "Embargoed until", + "embargoedUntil": "Embargoed until", "embargoedWasThrough": "Was embargoed until" } diff --git a/src/sections/dataset/DatasetSkeleton.tsx b/src/sections/dataset/DatasetSkeleton.tsx index 1b24c8a53..5555556c4 100644 --- a/src/sections/dataset/DatasetSkeleton.tsx +++ b/src/sections/dataset/DatasetSkeleton.tsx @@ -26,10 +26,10 @@ export function DatasetSkeleton() { - + - +
diff --git a/src/sections/dataset/dataset-files/DatasetFiles.tsx b/src/sections/dataset/dataset-files/DatasetFiles.tsx index 6c9adf29b..c29ee1f39 100644 --- a/src/sections/dataset/dataset-files/DatasetFiles.tsx +++ b/src/sections/dataset/dataset-files/DatasetFiles.tsx @@ -1,9 +1,9 @@ -import './index.css' import { useFilesTable } from './files-table/useFilesTable' import { FileRepository } from '../../../files/domain/repositories/FileRepository' import { useFiles } from './useFiles' import { useEffect } from 'react' import { FilesTable } from './files-table/FilesTable' +import { SpinnerSymbol } from './SpinnerSymbol' interface DatasetFilesProps { filesRepository: FileRepository @@ -16,12 +16,16 @@ export function DatasetFiles({ datasetPersistentId, datasetVersion }: DatasetFilesProps) { - const { files } = useFiles(filesRepository, datasetPersistentId, datasetVersion) + const { files, isLoading } = useFiles(filesRepository, datasetPersistentId, datasetVersion) const { table, setFilesTableData } = useFilesTable() useEffect(() => { setFilesTableData(files) }) + if (isLoading) { + return + } + return } diff --git a/src/sections/dataset/dataset-files/SpinnerSymbol.tsx b/src/sections/dataset/dataset-files/SpinnerSymbol.tsx new file mode 100644 index 000000000..43be7a5d9 --- /dev/null +++ b/src/sections/dataset/dataset-files/SpinnerSymbol.tsx @@ -0,0 +1,22 @@ +import { Col, Row, useTheme } from 'dataverse-design-system' +import { TailSpin } from 'react-loader-spinner' + +export function SpinnerSymbol() { + const theme = useTheme() + return ( + + + + + + ) +} diff --git a/src/sections/dataset/dataset-files/files-table/FilesTable.module.scss b/src/sections/dataset/dataset-files/files-table/FilesTable.module.scss new file mode 100644 index 000000000..3b313d526 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/FilesTable.module.scss @@ -0,0 +1,3 @@ +.pagination-container { + justify-content: center; +} \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/files-table/FilesTable.tsx b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx index c8f4b8797..156d7ef79 100644 --- a/src/sections/dataset/dataset-files/files-table/FilesTable.tsx +++ b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx @@ -1,21 +1,36 @@ -import { Table } from 'dataverse-design-system' +import { Col, Row, Table } from 'dataverse-design-system' import { Table as TableModel } from '@tanstack/react-table' import { FilesTableHeader } from './FilesTableHeader' import { FilesTableBody } from './FilesTableBody' -import { FilesTablePagination } from './FilesTablePagination' +import { TablePagination } from './table-pagination/TablePagination' import { File } from '../../../../files/domain/models/File' +import styles from './FilesTable.module.scss' interface FilesTableProps { table: TableModel } export function FilesTable({ table }: FilesTableProps) { return ( - <> +
- - + + + + + +
) } diff --git a/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx index 1fd74b203..ac02642f2 100644 --- a/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx +++ b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx @@ -16,16 +16,14 @@ export const columns: ColumnDef[] = [ /> ), cell: ({ row }) => ( -
- -
+ ) }, { diff --git a/src/sections/dataset/dataset-files/files-table/FilesTablePagination.tsx b/src/sections/dataset/dataset-files/files-table/FilesTablePagination.tsx deleted file mode 100644 index cdf5455a8..000000000 --- a/src/sections/dataset/dataset-files/files-table/FilesTablePagination.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { Table } from '@tanstack/react-table' -import { File } from '../../../../files/domain/models/File' - -interface FilesTablePaginationProps { - table: Table -} - -export function FilesTablePagination({ table }: FilesTablePaginationProps) { - return ( -
- - - - - -
Page
- - {table.getState().pagination.pageIndex + 1} of {table.getPageCount()} - -
- - | Go to page: - { - const page = e.target.value ? Number(e.target.value) - 1 : 0 - table.setPageIndex(page) - }} - className="border p-1 rounded w-16" - /> - - -
- ) -} diff --git a/src/sections/dataset/dataset-files/files-table/IndeterminateCheckbox.tsx b/src/sections/dataset/dataset-files/files-table/IndeterminateCheckbox.tsx index d431dca49..b36c22495 100644 --- a/src/sections/dataset/dataset-files/files-table/IndeterminateCheckbox.tsx +++ b/src/sections/dataset/dataset-files/files-table/IndeterminateCheckbox.tsx @@ -2,7 +2,6 @@ import { HTMLProps, useEffect, useRef } from 'react' export function IndeterminateCheckbox({ indeterminate, - className = '', ...rest }: { indeterminate?: boolean } & HTMLProps) { const ref = useRef(null) @@ -15,5 +14,5 @@ export function IndeterminateCheckbox({ } }, [ref, indeterminate, rest.checked]) - return + return } diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss index 5c057dd5f..5152151e8 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss @@ -9,21 +9,21 @@ display: flex; padding-left: 10px; &__subtext { - font-size: $dv-font-size-sm; color: $dv-subtext-color; + font-size: $dv-font-size-sm; } } .checksum-container { - min-height: 20px; display: flex; align-items: center; + min-height: 20px; } .description-container { - font-size: $dv-font-size-sm; color: $dv-text-color; + font-size: $dv-font-size-sm; } .labels-container >*{ diff --git a/src/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtons.tsx b/src/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtons.tsx new file mode 100644 index 000000000..a0d5c8c9c --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtons.tsx @@ -0,0 +1,33 @@ +import { Pagination } from 'dataverse-design-system' + +interface PageNumbersButtonsProps { + startPageIndex: number + endPageIndex: number + selectedPageIndex: number + goToPage: (pageIndex: number) => void +} +export function PageNumbersButtons({ + startPageIndex, + endPageIndex, + selectedPageIndex, + goToPage +}: PageNumbersButtonsProps) { + const arrayOfPageNumbers = Array.from({ length: endPageIndex - startPageIndex + 1 }) + + return ( + <> + {arrayOfPageNumbers.map((_, index) => { + const pageIndex = startPageIndex + index + const pageNumber = pageIndex + 1 + return ( + goToPage(pageIndex)} + active={selectedPageIndex === pageIndex} + /> + ) + })} + + ) +} diff --git a/src/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtonsWithEllipsis.tsx b/src/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtonsWithEllipsis.tsx new file mode 100644 index 000000000..11d2d3c15 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtonsWithEllipsis.tsx @@ -0,0 +1,74 @@ +import { Pagination } from 'dataverse-design-system' +import { PageNumbersButtons } from './PageNumbersButtons' + +interface TablePaginationNumbersWithEllipsisProps { + selectedPageIndex: number + pageCount: number + goToPage: (pageIndex: number) => void +} + +export function PageNumbersButtonsWithEllipsis({ + selectedPageIndex, + pageCount, + goToPage +}: TablePaginationNumbersWithEllipsisProps) { + const firstPageNumber = 1 + const firstPageIndex = 0 + const lastPageIndex = pageCount - 1 + const { startPageIndex, endPageIndex } = calculatePageLimits( + selectedPageIndex, + firstPageIndex, + lastPageIndex + ) + + return ( + <> + {startPageIndex > firstPageIndex && ( + <> + goToPage(firstPageIndex)} + /> + + + )} + + {endPageIndex < lastPageIndex && ( + <> + + goToPage(lastPageIndex)} + /> + + )} + + ) +} + +function calculatePageLimits( + selectedPageIndex: number, + firstPageIndex: number, + lastPageIndex: number +) { + const visiblePageRange = 10 + let startPageIndex = Math.max( + firstPageIndex, + selectedPageIndex - Math.floor(visiblePageRange / 2) + ) + let endPageIndex = Math.min(lastPageIndex, startPageIndex + visiblePageRange - 1) + + if (endPageIndex - startPageIndex + 1 < visiblePageRange) { + endPageIndex = Math.min(lastPageIndex, startPageIndex + visiblePageRange - 1) + startPageIndex = Math.max(firstPageIndex, endPageIndex - visiblePageRange + 1) + } + + return { startPageIndex: startPageIndex, endPageIndex: endPageIndex } +} diff --git a/src/sections/dataset/dataset-files/files-table/table-pagination/PageSizeSelector.tsx b/src/sections/dataset/dataset-files/files-table/table-pagination/PageSizeSelector.tsx new file mode 100644 index 000000000..07942dd8f --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/table-pagination/PageSizeSelector.tsx @@ -0,0 +1,29 @@ +import styles from './TablePagination.module.scss' + +export function PageSizeSelector({ + pageSize, + setPageSize +}: { + pageSize: number + setPageSize: (pageSize: number) => void +}) { + return ( +
+ + +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/table-pagination/TablePagination.module.scss b/src/sections/dataset/dataset-files/files-table/table-pagination/TablePagination.module.scss new file mode 100644 index 000000000..db6710af1 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/table-pagination/TablePagination.module.scss @@ -0,0 +1,14 @@ +.container { + display: flex; + align-items: center; +} + +.size-selector-container { + display:flex; + margin-bottom: 14px; + margin-left: 28px; + + &__text { + margin-right: 14px; + } +} \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/files-table/table-pagination/TablePagination.tsx b/src/sections/dataset/dataset-files/files-table/table-pagination/TablePagination.tsx new file mode 100644 index 000000000..6b669607a --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/table-pagination/TablePagination.tsx @@ -0,0 +1,45 @@ +import { Pagination } from 'dataverse-design-system' +import { PageNumbersButtonsWithEllipsis } from './PageNumbersButtonsWithEllipsis' +import { PageSizeSelector } from './PageSizeSelector' +import styles from './TablePagination.module.scss' + +interface TablePaginationProps { + pageIndex: number + pageCount: number + pageSize: number + setPageSize: (pageSize: number) => void + goToPage: (pageIndex: number) => void + goToPreviousPage: () => void + goToNextPage: () => void + canGoToPreviousPage: boolean + canGoToNextPage: boolean +} + +export function TablePagination({ + pageIndex, + pageCount, + pageSize, + setPageSize, + goToPage, + goToPreviousPage, + goToNextPage, + canGoToPreviousPage, + canGoToNextPage +}: TablePaginationProps) { + return ( +
+ + goToPage(0)} disabled={!canGoToPreviousPage} /> + goToPreviousPage()} disabled={!canGoToPreviousPage} /> + + goToNextPage()} disabled={!canGoToNextPage} /> + goToPage(pageCount - 1)} disabled={!canGoToNextPage} /> + + +
+ ) +} diff --git a/src/sections/dataset/dataset-files/index.css b/src/sections/dataset/dataset-files/index.css deleted file mode 100644 index 43c09e0f6..000000000 --- a/src/sections/dataset/dataset-files/index.css +++ /dev/null @@ -1,26 +0,0 @@ -html { - font-family: sans-serif; - font-size: 14px; -} - -table { - border: 1px solid lightgray; -} - -tbody { - border-bottom: 1px solid lightgray; -} - -th { - border-bottom: 1px solid lightgray; - border-right: 1px solid lightgray; - padding: 2px 4px; -} - -tfoot { - color: gray; -} - -tfoot th { - font-weight: normal; -} diff --git a/src/stories/files/FileMockData.ts b/src/stories/files/FileMockData.ts index 5d26e8187..0d7e70fed 100644 --- a/src/stories/files/FileMockData.ts +++ b/src/stories/files/FileMockData.ts @@ -15,4 +15,4 @@ export function makeFiles(len: number): File[] { }) } -export const FilesMockData = (): File[] => makeFiles(20) +export const FilesMockData = (): File[] => makeFiles(200) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx index 4a438e808..e5424047f 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info-cell/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx @@ -10,6 +10,7 @@ describe('CopyToClipboardButton', () => { cy.findByRole('button', { name: 'Copy to clipboard icon' }).click() + // eslint-disable-next-line @typescript-eslint/unbound-method cy.wrap(win.navigator.clipboard.writeText).should('be.calledWith', textToCopy) cy.findByRole('img', { name: 'Correctly copied to clipboard icon' }).should('exist') diff --git a/tests/component/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtonsWithEllipsis.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtonsWithEllipsis.spec.tsx new file mode 100644 index 000000000..128584d9b --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtonsWithEllipsis.spec.tsx @@ -0,0 +1,104 @@ +import { PageNumbersButtonsWithEllipsis } from '../../../../../../../src/sections/dataset/dataset-files/files-table/table-pagination/PageNumbersButtonsWithEllipsis' + +let goToPage: (pageIndex: number) => void +const selectedPageIndex = 3 +const pageCount = 100 +describe('PageNumbersButtonsWithEllipsis', () => { + beforeEach(() => { + goToPage = cy.stub().resolves() + }) + + it('renders page numbers with last ellipsis correctly', () => { + cy.customMount( + + ) + + cy.findAllByRole('button').then((buttons) => { + expect(buttons).to.have.length(11) + expect(buttons[0]).to.have.text('1') + expect(buttons[1]).to.have.text('2') + expect(buttons[2]).to.have.text('3') + expect(buttons[3]).to.have.text('5') + expect(buttons[4]).to.have.text('6') + expect(buttons[5]).to.have.text('7') + expect(buttons[6]).to.have.text('8') + expect(buttons[7]).to.have.text('9') + expect(buttons[8]).to.have.text('10') + expect(buttons[9]).to.have.text('…More') + expect(buttons[10]).to.have.text('100') + }) + + const activeListItem = cy.findByText(/4/i).parent('li') + activeListItem.should('have.class', 'active') + }) + + it('calls goToPage function when a page number is clicked', () => { + cy.customMount( + + ) + + cy.findByText('1').click() + cy.wrap(goToPage).should('have.been.calledWith', 0) + + cy.findByText('7').click() + cy.wrap(goToPage).should('have.been.calledWith', 6) + }) + + it('renders both ellipsis correctly', () => { + const selectedPageIndex = 20 + + cy.customMount( + + ) + + cy.findAllByRole('button').then((buttons) => { + expect(buttons).to.have.length(13) + expect(buttons[0]).to.have.text('1') + expect(buttons[1]).to.have.text('…More') + expect(buttons[2]).to.have.text('16') + expect(buttons[3]).to.have.text('17') + expect(buttons[4]).to.have.text('18') + expect(buttons[5]).to.have.text('19') + expect(buttons[6]).to.have.text('20') + expect(buttons[7]).to.have.text('22') + expect(buttons[8]).to.have.text('23') + expect(buttons[9]).to.have.text('24') + expect(buttons[10]).to.have.text('25') + expect(buttons[11]).to.have.text('…More') + expect(buttons[12]).to.have.text('100') + }) + + const activeListItem = cy.findByText(/21/i).parent('li') + activeListItem.should('have.class', 'active') + }) + + it('calls goToPage function when first and last page numbers are clicked', () => { + const selectedPageIndex = 20 + + cy.customMount( + + ) + + cy.findByText('1').click() + cy.wrap(goToPage).should('have.been.calledWith', 0) + + cy.findByText('100').click() + cy.wrap(goToPage).should('have.been.calledWith', 99) + }) +}) diff --git a/tests/component/sections/dataset/dataset-files/files-table/table-pagination/TablePaginatioin.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/table-pagination/TablePaginatioin.spec.tsx new file mode 100644 index 000000000..f36f2408d --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/table-pagination/TablePaginatioin.spec.tsx @@ -0,0 +1,139 @@ +import { TablePagination } from '../../../../../../../src/sections/dataset/dataset-files/files-table/table-pagination/TablePagination' + +let pageIndex: number +let pageCount: number +let pageSize: number +let setPageSize: (pageSize: number) => void +let goToPage: (pageIndex: number) => void +let goToPreviousPage: () => void +let goToNextPage: () => void +let canGoToPreviousPage: boolean +let canGoToNextPage: boolean + +describe('TalePagination', () => { + beforeEach(() => { + pageIndex = 2 + pageCount = 200 + pageSize = 10 + setPageSize = cy.stub().resolves() + goToPage = cy.stub().resolves() + goToPreviousPage = cy.stub().resolves() + goToNextPage = cy.stub().resolves() + canGoToPreviousPage = true + canGoToNextPage = true + }) + + it('clicking on the first page button calls goToPage 0', () => { + cy.customMount( + + ) + + cy.findByRole('button', { name: 'First' }).click() + cy.wrap(goToPage).should('have.been.calledWith', 0) + }) + + it('clicking on the previous page button calls previousPage', () => { + cy.customMount( + + ) + + cy.findByRole('button', { name: 'Previous' }).click() + cy.wrap(goToPreviousPage).should('have.been.called') + }) + + it('clicking on a page button calls setPageIndex with the correct index', () => { + cy.customMount( + + ) + + cy.findByRole('button', { name: '5' }).click() + cy.wrap(goToPage).should('have.been.calledWith', 4) + }) + + it('clicking on the next page button calls nextPage', () => { + cy.customMount( + + ) + + cy.findByRole('button', { name: 'Next' }).click() + cy.wrap(goToNextPage).should('have.been.called') + }) + + it('clicking on the last page button calls setPageIndex with the last index', () => { + cy.customMount( + + ) + + cy.findByRole('button', { name: 'Last' }).click() + cy.wrap(goToPage).should('have.been.calledWith', 199) + }) + + it('selecting a page size calls setPageSize with the selected value', () => { + cy.customMount( + + ) + + cy.findByLabelText('Files per page').select('50') + cy.wrap(setPageSize).should('have.been.calledWith', 50) + }) +}) From 4437ae736024007c31bbbb91881b703eb1ae8476 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Fri, 30 Jun 2023 16:51:04 +0200 Subject: [PATCH 09/30] feat(Pagination): add story and tests to the design-system --- .../assets/styles/bootstrap-customized.scss | 100 ++++++++++++++++++ .../styles/design-tokens/colors.module.scss | 0 .../design-tokens/typography.module.scss | 0 .../assets/styles/fontcustom.scss | 0 .../src/lib/assets/styles/index.scss | 3 + .../assets/styles/bootstrap-customized.scss | 100 ------------------ .../lib/components/assets/styles/index.scss | 3 - .../lib/components/badge/Badge.module.scss | 2 +- .../lib/components/button/Button.module.scss | 2 +- .../DropdownButton.module.scss | 2 +- .../FormGroupWithMultipleFields.module.scss | 2 +- .../RequiredInputSymbol.module.scss | 2 +- .../components/pagination/PaginationFirst.tsx | 2 +- .../components/pagination/PaginationItem.tsx | 2 +- .../components/pagination/PaginationLast.tsx | 2 +- .../components/pagination/PaginationNext.tsx | 2 +- .../components/pagination/PaginationPrev.tsx | 2 +- .../src/lib/components/theme/BaseTheme.ts | 4 +- .../lib/components/theme/ThemeProvider.tsx | 2 +- .../tooltip/QuestionIcon.module.scss | 2 +- .../stories/pagination/Pagination.stories.tsx | 41 +++++++ .../component/pagination/Pagination.spec.tsx | 9 ++ .../pagination/PaginationEllipsis.spec.tsx | 9 ++ .../pagination/PaginationFirst.spec.tsx | 24 +++++ .../pagination/PaginationItem.spec.tsx | 29 +++++ .../pagination/PaginationLast.spec.tsx | 23 ++++ .../pagination/PaginationNext.spec.tsx | 23 ++++ .../pagination/PaginationPrev.spec.tsx | 23 ++++ .../DatasetCitation.module.scss | 2 +- .../file-info-cell/FileInfoCell.module.scss | 4 +- .../CopyToClipboard.module.scss | 2 +- .../file-thumbnail/FileThumbnail.module.scss | 4 +- .../HelloDataverse.module.scss | 2 +- src/sections/layout/footer/Footer.module.scss | 4 +- 34 files changed, 307 insertions(+), 126 deletions(-) create mode 100644 packages/design-system/src/lib/assets/styles/bootstrap-customized.scss rename packages/design-system/src/lib/{components => }/assets/styles/design-tokens/colors.module.scss (100%) rename packages/design-system/src/lib/{components => }/assets/styles/design-tokens/typography.module.scss (100%) rename packages/design-system/src/lib/{components => }/assets/styles/fontcustom.scss (100%) create mode 100644 packages/design-system/src/lib/assets/styles/index.scss delete mode 100644 packages/design-system/src/lib/components/assets/styles/bootstrap-customized.scss delete mode 100644 packages/design-system/src/lib/components/assets/styles/index.scss create mode 100644 packages/design-system/src/lib/stories/pagination/Pagination.stories.tsx create mode 100644 packages/design-system/tests/component/pagination/Pagination.spec.tsx create mode 100644 packages/design-system/tests/component/pagination/PaginationEllipsis.spec.tsx create mode 100644 packages/design-system/tests/component/pagination/PaginationFirst.spec.tsx create mode 100644 packages/design-system/tests/component/pagination/PaginationItem.spec.tsx create mode 100644 packages/design-system/tests/component/pagination/PaginationLast.spec.tsx create mode 100644 packages/design-system/tests/component/pagination/PaginationNext.spec.tsx create mode 100644 packages/design-system/tests/component/pagination/PaginationPrev.spec.tsx diff --git a/packages/design-system/src/lib/assets/styles/bootstrap-customized.scss b/packages/design-system/src/lib/assets/styles/bootstrap-customized.scss new file mode 100644 index 000000000..acc6a1493 --- /dev/null +++ b/packages/design-system/src/lib/assets/styles/bootstrap-customized.scss @@ -0,0 +1,100 @@ +@import "src/lib/assets/styles/design-tokens/typography.module"; +@import "src/lib/assets/styles/design-tokens/colors.module"; + +// Theme + +$primary: $dv-primary-color; +$secondary: $dv-secondary-color; +$success: $dv-success-color; +$info: $dv-info-color; +$warning: $dv-warning-color; +$danger: $dv-danger-color; + +@import "../../../../../../node_modules/bootstrap/scss/functions"; +@import "../../../../../../node_modules/bootstrap/scss/variables"; +@import "../../../../../../node_modules/bootstrap/scss/mixins"; + +// Body +$body-color: $dv-text-color; +$headings-color: $dv-headings-color; + +// Typography +$font-family-base: $dv-font-family; + +$font-size-base: $dv-font-size; +$font-size-sm: $dv-font-size-sm; + +$line-height-base: $dv-line-height; + +$font-weight-normal: $dv-font-weight; +$font-weight-light: $dv-font-weight-light; +$font-weight-bold: $dv-font-weight-bold; + +// Links +$link-color: $dv-link-color; +$link-hover-color: $dv-link-hover-color; + +// Base +@import "../../../../../../node_modules/bootstrap/scss/maps"; +@import "../../../../../../node_modules/bootstrap/scss/root"; +@import "../../../../../../node_modules/bootstrap/scss/reboot"; +@import "../../../../../../node_modules/bootstrap/scss/type"; + +// Buttons and Dropdowns +@import "../../../../../../node_modules/bootstrap/scss/buttons"; +@import '../../../../../../node_modules/bootstrap/scss/button-group'; +@import "../../../../../../node_modules/bootstrap/scss/dropdown"; + +// Grid +@import "../../../../../../node_modules/bootstrap/scss/utilities"; +@import "../../../../../../node_modules/bootstrap/scss/utilities/api"; +@import "../../../../../../node_modules/bootstrap/scss/containers"; +@import "../../../../../../node_modules/bootstrap/scss/grid"; + +// Badge +@import "../../../../../../node_modules/bootstrap/scss/badge"; + +// Forms +$form-label-font-weight: $dv-font-weight-bold; + +@import "../../../../../../node_modules/bootstrap/scss/forms"; + + +// Table +@import "../../../../../../node_modules/bootstrap/scss/tables"; + + +// Accordion +@import "../../../../../../node_modules/bootstrap/scss/accordion"; + +// Modal +@import "../../../../../../node_modules/bootstrap/scss/modal"; +@import "../../../../../../node_modules/bootstrap/scss/close"; + +// Breadcrumb +$breadcrumb-divider: ">"; + +@import "../../../../../../node_modules/bootstrap/scss/breadcrumb"; + +// Tooltip +@import "../../../../../../node_modules/bootstrap/scss/tooltip"; + +// Alert +@import "../../../../../../node_modules/bootstrap/scss/alert"; + +// Pagination +@import "../../../../../../node_modules/bootstrap/scss/pagination"; + +// Navbar + +$navbar-light-brand-color: $dv-brand-color; +$navbar-brand-font-size: $dv-brand-font-size; + +@import "../../../../../../node_modules/bootstrap/scss/nav"; +@import "../../../../../../node_modules/bootstrap/scss/navbar"; +@import "../../../../../../node_modules/bootstrap/scss/transitions"; +@import "../../../../../../node_modules/bootstrap/scss/helpers"; + +.navbar-collapse { + justify-content: end; +} \ No newline at end of file diff --git a/packages/design-system/src/lib/components/assets/styles/design-tokens/colors.module.scss b/packages/design-system/src/lib/assets/styles/design-tokens/colors.module.scss similarity index 100% rename from packages/design-system/src/lib/components/assets/styles/design-tokens/colors.module.scss rename to packages/design-system/src/lib/assets/styles/design-tokens/colors.module.scss diff --git a/packages/design-system/src/lib/components/assets/styles/design-tokens/typography.module.scss b/packages/design-system/src/lib/assets/styles/design-tokens/typography.module.scss similarity index 100% rename from packages/design-system/src/lib/components/assets/styles/design-tokens/typography.module.scss rename to packages/design-system/src/lib/assets/styles/design-tokens/typography.module.scss diff --git a/packages/design-system/src/lib/components/assets/styles/fontcustom.scss b/packages/design-system/src/lib/assets/styles/fontcustom.scss similarity index 100% rename from packages/design-system/src/lib/components/assets/styles/fontcustom.scss rename to packages/design-system/src/lib/assets/styles/fontcustom.scss diff --git a/packages/design-system/src/lib/assets/styles/index.scss b/packages/design-system/src/lib/assets/styles/index.scss new file mode 100644 index 000000000..9a6cc6da3 --- /dev/null +++ b/packages/design-system/src/lib/assets/styles/index.scss @@ -0,0 +1,3 @@ +@import "src/lib/assets/styles/fontcustom"; +@import "src/lib/assets/styles/bootstrap-customized"; + diff --git a/packages/design-system/src/lib/components/assets/styles/bootstrap-customized.scss b/packages/design-system/src/lib/components/assets/styles/bootstrap-customized.scss deleted file mode 100644 index 38c441a0f..000000000 --- a/packages/design-system/src/lib/components/assets/styles/bootstrap-customized.scss +++ /dev/null @@ -1,100 +0,0 @@ -@import "src/lib/components/assets/styles/design-tokens/typography.module"; -@import "src/lib/components/assets/styles/design-tokens/colors.module"; - -// Theme - -$primary: $dv-primary-color; -$secondary: $dv-secondary-color; -$success: $dv-success-color; -$info: $dv-info-color; -$warning: $dv-warning-color; -$danger: $dv-danger-color; - -@import "bootstrap/scss/functions"; -@import "bootstrap/scss/variables"; -@import "bootstrap/scss/mixins"; - -// Body -$body-color: $dv-text-color; -$headings-color: $dv-headings-color; - -// Typography -$font-family-base: $dv-font-family; - -$font-size-base: $dv-font-size; -$font-size-sm: $dv-font-size-sm; - -$line-height-base: $dv-line-height; - -$font-weight-normal: $dv-font-weight; -$font-weight-light: $dv-font-weight-light; -$font-weight-bold: $dv-font-weight-bold; - -// Links -$link-color: $dv-link-color; -$link-hover-color: $dv-link-hover-color; - -// Base -@import "bootstrap/scss/maps"; -@import "bootstrap/scss/root"; -@import "bootstrap/scss/reboot"; -@import "bootstrap/scss/type"; - -// Buttons and Dropdowns -@import "bootstrap/scss/buttons"; -@import 'bootstrap/scss/button-group'; -@import "bootstrap/scss/dropdown"; - -// Grid -@import "bootstrap/scss/utilities"; -@import "bootstrap/scss/utilities/api"; -@import "bootstrap/scss/containers"; -@import "bootstrap/scss/grid"; - -// Badge -@import "bootstrap/scss/badge"; - -// Forms -$form-label-font-weight: $dv-font-weight-bold; - -@import "bootstrap/scss/forms"; - - -// Table -@import "bootstrap/scss/tables"; - - -// Accordion -@import "bootstrap/scss/accordion"; - -// Modal -@import "bootstrap/scss/modal"; -@import "bootstrap/scss/close"; - -// Breadcrumb -$breadcrumb-divider: ">"; - -@import "bootstrap/scss/breadcrumb"; - -// Tooltip -@import "bootstrap/scss/tooltip"; - -// Alert -@import "bootstrap/scss/alert"; - -// Pagination -@import "bootstrap/scss/pagination"; - -// Navbar - -$navbar-light-brand-color: $dv-brand-color; -$navbar-brand-font-size: $dv-brand-font-size; - -@import "bootstrap/scss/nav"; -@import "bootstrap/scss/navbar"; -@import "bootstrap/scss/transitions"; -@import "bootstrap/scss/helpers"; - -.navbar-collapse { - justify-content: end; -} \ No newline at end of file diff --git a/packages/design-system/src/lib/components/assets/styles/index.scss b/packages/design-system/src/lib/components/assets/styles/index.scss deleted file mode 100644 index 1635c7e16..000000000 --- a/packages/design-system/src/lib/components/assets/styles/index.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import "src/lib/components/assets/styles/fontcustom"; -@import "src/lib/components/assets/styles/bootstrap-customized"; - diff --git a/packages/design-system/src/lib/components/badge/Badge.module.scss b/packages/design-system/src/lib/components/badge/Badge.module.scss index a7d817d7d..c3e0ac8ba 100644 --- a/packages/design-system/src/lib/components/badge/Badge.module.scss +++ b/packages/design-system/src/lib/components/badge/Badge.module.scss @@ -1,6 +1,6 @@ @import 'bootstrap/scss/functions'; @import 'bootstrap/scss/variables'; -@import 'src/lib/components/assets/styles/design-tokens/colors.module'; +@import 'src/lib/assets/styles/design-tokens/colors.module'; .primary:not(#\#) { color: color-contrast($dv-primary-color); diff --git a/packages/design-system/src/lib/components/button/Button.module.scss b/packages/design-system/src/lib/components/button/Button.module.scss index 7fb0569bd..b6a484e75 100644 --- a/packages/design-system/src/lib/components/button/Button.module.scss +++ b/packages/design-system/src/lib/components/button/Button.module.scss @@ -1,4 +1,4 @@ -@import "src/lib/components/assets/styles/design-tokens/colors.module"; +@import "src/lib/assets/styles/design-tokens/colors.module"; .border { border: 1px solid $dv-button-border-color; diff --git a/packages/design-system/src/lib/components/dropdown-button/DropdownButton.module.scss b/packages/design-system/src/lib/components/dropdown-button/DropdownButton.module.scss index 874686b70..da26744c9 100644 --- a/packages/design-system/src/lib/components/dropdown-button/DropdownButton.module.scss +++ b/packages/design-system/src/lib/components/dropdown-button/DropdownButton.module.scss @@ -1,4 +1,4 @@ -@import "src/lib/components/assets/styles/design-tokens/colors.module"; +@import "src/lib/assets/styles/design-tokens/colors.module"; .border { border: 1px solid $dv-button-border-color; diff --git a/packages/design-system/src/lib/components/form/form-group-multiple-fields/FormGroupWithMultipleFields.module.scss b/packages/design-system/src/lib/components/form/form-group-multiple-fields/FormGroupWithMultipleFields.module.scss index 17e2a56a0..d8700a3ab 100644 --- a/packages/design-system/src/lib/components/form/form-group-multiple-fields/FormGroupWithMultipleFields.module.scss +++ b/packages/design-system/src/lib/components/form/form-group-multiple-fields/FormGroupWithMultipleFields.module.scss @@ -1,4 +1,4 @@ -@import "src/lib/components/assets/styles/design-tokens/typography.module"; +@import "src/lib/assets/styles/design-tokens/typography.module"; .title { padding-top: calc(0.375rem + 1px); diff --git a/packages/design-system/src/lib/components/form/required-input-symbol/RequiredInputSymbol.module.scss b/packages/design-system/src/lib/components/form/required-input-symbol/RequiredInputSymbol.module.scss index 0d47c8103..6b755b404 100644 --- a/packages/design-system/src/lib/components/form/required-input-symbol/RequiredInputSymbol.module.scss +++ b/packages/design-system/src/lib/components/form/required-input-symbol/RequiredInputSymbol.module.scss @@ -1,4 +1,4 @@ -@import "src/lib/components/assets/styles/design-tokens/colors.module"; +@import "src/lib/assets/styles/design-tokens/colors.module"; .asterisk { color: $dv-danger-color; diff --git a/packages/design-system/src/lib/components/pagination/PaginationFirst.tsx b/packages/design-system/src/lib/components/pagination/PaginationFirst.tsx index 9225a6022..7a7d489cd 100644 --- a/packages/design-system/src/lib/components/pagination/PaginationFirst.tsx +++ b/packages/design-system/src/lib/components/pagination/PaginationFirst.tsx @@ -2,7 +2,7 @@ import { Pagination } from 'react-bootstrap' interface PaginationFirstProps { onClick: () => void - disabled: boolean + disabled?: boolean } export function PaginationFirst({ onClick, disabled }: PaginationFirstProps) { return diff --git a/packages/design-system/src/lib/components/pagination/PaginationItem.tsx b/packages/design-system/src/lib/components/pagination/PaginationItem.tsx index 44199ed33..c2876bb6f 100644 --- a/packages/design-system/src/lib/components/pagination/PaginationItem.tsx +++ b/packages/design-system/src/lib/components/pagination/PaginationItem.tsx @@ -2,7 +2,7 @@ import { Pagination } from 'react-bootstrap' interface PaginationItemProps { pageNumber: number - onClick?: () => void + onClick: () => void disabled?: boolean active?: boolean } diff --git a/packages/design-system/src/lib/components/pagination/PaginationLast.tsx b/packages/design-system/src/lib/components/pagination/PaginationLast.tsx index f47848575..b0234781a 100644 --- a/packages/design-system/src/lib/components/pagination/PaginationLast.tsx +++ b/packages/design-system/src/lib/components/pagination/PaginationLast.tsx @@ -2,7 +2,7 @@ import { Pagination } from 'react-bootstrap' interface PaginationLastProps { onClick: () => void - disabled: boolean + disabled?: boolean } export function PaginationLast({ onClick, disabled }: PaginationLastProps) { return diff --git a/packages/design-system/src/lib/components/pagination/PaginationNext.tsx b/packages/design-system/src/lib/components/pagination/PaginationNext.tsx index 225e515ff..49756a05b 100644 --- a/packages/design-system/src/lib/components/pagination/PaginationNext.tsx +++ b/packages/design-system/src/lib/components/pagination/PaginationNext.tsx @@ -2,7 +2,7 @@ import { Pagination } from 'react-bootstrap' interface PaginationNextProps { onClick: () => void - disabled: boolean + disabled?: boolean } export function PaginationNext({ onClick, disabled }: PaginationNextProps) { return diff --git a/packages/design-system/src/lib/components/pagination/PaginationPrev.tsx b/packages/design-system/src/lib/components/pagination/PaginationPrev.tsx index 36b3e1612..fbfd7a289 100644 --- a/packages/design-system/src/lib/components/pagination/PaginationPrev.tsx +++ b/packages/design-system/src/lib/components/pagination/PaginationPrev.tsx @@ -2,7 +2,7 @@ import { Pagination } from 'react-bootstrap' interface PaginationPrevProps { onClick: () => void - disabled: boolean + disabled?: boolean } export function PaginationPrev({ onClick, disabled }: PaginationPrevProps) { return diff --git a/packages/design-system/src/lib/components/theme/BaseTheme.ts b/packages/design-system/src/lib/components/theme/BaseTheme.ts index 2ab0a2209..9c7399336 100644 --- a/packages/design-system/src/lib/components/theme/BaseTheme.ts +++ b/packages/design-system/src/lib/components/theme/BaseTheme.ts @@ -1,5 +1,5 @@ -import colorVariables from '../assets/styles/design-tokens/colors.module.scss' -import typographyVariables from '../assets/styles/design-tokens/typography.module.scss' +import colorVariables from '../../assets/styles/design-tokens/colors.module.scss' +import typographyVariables from '../../assets/styles/design-tokens/typography.module.scss' export interface BaseThemeType { themeKey: string diff --git a/packages/design-system/src/lib/components/theme/ThemeProvider.tsx b/packages/design-system/src/lib/components/theme/ThemeProvider.tsx index ebcae51a9..20a23c107 100644 --- a/packages/design-system/src/lib/components/theme/ThemeProvider.tsx +++ b/packages/design-system/src/lib/components/theme/ThemeProvider.tsx @@ -1,7 +1,7 @@ import { baseTheme, BaseThemeType } from './BaseTheme' import { ReactNode, useContext } from 'react' import { ThemeContext } from './ThemeContext' -import '../assets/styles/index.scss' +import '../../assets/styles/index.scss' export interface ThemeProps { theme?: BaseThemeType diff --git a/packages/design-system/src/lib/components/tooltip/QuestionIcon.module.scss b/packages/design-system/src/lib/components/tooltip/QuestionIcon.module.scss index 160ae57e3..581aa0ec2 100644 --- a/packages/design-system/src/lib/components/tooltip/QuestionIcon.module.scss +++ b/packages/design-system/src/lib/components/tooltip/QuestionIcon.module.scss @@ -1,4 +1,4 @@ -@import "src/lib/components/assets/styles/design-tokens/colors.module"; +@import "src/lib/assets/styles/design-tokens/colors.module"; .question-tooltip { color: $dv-tooltip-color; diff --git a/packages/design-system/src/lib/stories/pagination/Pagination.stories.tsx b/packages/design-system/src/lib/stories/pagination/Pagination.stories.tsx new file mode 100644 index 000000000..2d613987c --- /dev/null +++ b/packages/design-system/src/lib/stories/pagination/Pagination.stories.tsx @@ -0,0 +1,41 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { Pagination } from '../../components/pagination/Pagination' + +/** + * ## Description + * The pagination component is a user interface element that allows users to navigate through a collection of items or + * pages. It is commonly used to display a large set of data in smaller, manageable chunks. + + * ## Usage guidelines + * The pagination component should be used when there is a need to break down a large amount of content into smaller + * sections to enhance usability and navigation. It should be placed at the bottom or top of the content it controls + * and provide clear navigation options for users to move between pages. + */ +const meta: Meta = { + title: 'Pagination', + component: Pagination, + tags: ['autodocs'] +} + +export default meta +type Story = StoryObj + +export const Default: Story = { + render: () => ( + + {}} /> + {}} /> + {}} /> + + {}} /> + {}} /> + {}} /> + {}} /> + {}} /> + + {}} /> + {}} /> + {}} /> + + ) +} diff --git a/packages/design-system/tests/component/pagination/Pagination.spec.tsx b/packages/design-system/tests/component/pagination/Pagination.spec.tsx new file mode 100644 index 000000000..79db03be0 --- /dev/null +++ b/packages/design-system/tests/component/pagination/Pagination.spec.tsx @@ -0,0 +1,9 @@ +import { Pagination } from '../../../src/lib/components/pagination/Pagination' + +describe('Pagination', () => { + it('should render correctly', () => { + cy.mount() + + cy.findByRole('list').should('exist') + }) +}) diff --git a/packages/design-system/tests/component/pagination/PaginationEllipsis.spec.tsx b/packages/design-system/tests/component/pagination/PaginationEllipsis.spec.tsx new file mode 100644 index 000000000..3159bdae0 --- /dev/null +++ b/packages/design-system/tests/component/pagination/PaginationEllipsis.spec.tsx @@ -0,0 +1,9 @@ +import { Pagination } from '../../../src/lib/components/pagination/Pagination' + +describe('PaginationEllipsis component', () => { + it('should render correctly', () => { + cy.mount() + + cy.findByRole('button', { name: 'More' }).should('exist') + }) +}) diff --git a/packages/design-system/tests/component/pagination/PaginationFirst.spec.tsx b/packages/design-system/tests/component/pagination/PaginationFirst.spec.tsx new file mode 100644 index 000000000..b8610e77f --- /dev/null +++ b/packages/design-system/tests/component/pagination/PaginationFirst.spec.tsx @@ -0,0 +1,24 @@ +import { Pagination } from '../../../src/lib/components/pagination/Pagination' + +describe('PaginationFirst component', () => { + it('should render correctly', () => { + cy.mount( {}} />) + cy.findByRole('button', { name: 'First' }).should('exist') + }) + + it('should call onClick event', () => { + const onClick = cy.stub().resolves() + cy.mount() + + cy.findByRole('button', { name: 'First' }).click() + + cy.wrap(onClick).should('be.calledOnce') + }) + + it('should be disabled', () => { + cy.mount( {}} disabled />) + + cy.findByRole('button', { name: 'First' }).should('not.exist') + cy.findByText('First').should('exist') + }) +}) diff --git a/packages/design-system/tests/component/pagination/PaginationItem.spec.tsx b/packages/design-system/tests/component/pagination/PaginationItem.spec.tsx new file mode 100644 index 000000000..95529e07e --- /dev/null +++ b/packages/design-system/tests/component/pagination/PaginationItem.spec.tsx @@ -0,0 +1,29 @@ +import { Pagination } from '../../../src/lib/components/pagination/Pagination' + +describe('PaginationItem component', () => { + it('should render correctly', () => { + cy.mount( {}} />) + cy.findByRole('button', { name: '10' }).should('exist') + }) + + it('should call onClick event', () => { + const onClick = cy.stub().resolves() + cy.mount() + + cy.findByRole('button', { name: '10' }).click() + + cy.wrap(onClick).should('be.calledOnce') + }) + + it('should be disabled', () => { + cy.mount( {}} />) + cy.findByRole('button', { name: '10' }).should('not.exist') + cy.findByText('10').should('exist') + }) + + it('should be active', () => { + cy.mount( {}} />) + const activeListItem = cy.findByText(/10/i).parent('li') + activeListItem.should('have.class', 'active') + }) +}) diff --git a/packages/design-system/tests/component/pagination/PaginationLast.spec.tsx b/packages/design-system/tests/component/pagination/PaginationLast.spec.tsx new file mode 100644 index 000000000..15db33c03 --- /dev/null +++ b/packages/design-system/tests/component/pagination/PaginationLast.spec.tsx @@ -0,0 +1,23 @@ +import { Pagination } from '../../../src/lib/components/pagination/Pagination' + +describe('PaginationLast component', () => { + it('should render correctly', () => { + cy.mount( {}} />) + cy.findByRole('button', { name: 'Last' }).should('exist') + }) + + it('should call onClick event', () => { + const onClick = cy.stub().resolves() + cy.mount() + + cy.findByRole('button', { name: 'Last' }).click() + + cy.wrap(onClick).should('be.calledOnce') + }) + + it('should be disabled', () => { + cy.mount( {}} disabled />) + cy.findByRole('button', { name: 'Last' }).should('not.exist') + cy.findByText('Last').should('exist') + }) +}) diff --git a/packages/design-system/tests/component/pagination/PaginationNext.spec.tsx b/packages/design-system/tests/component/pagination/PaginationNext.spec.tsx new file mode 100644 index 000000000..e08374285 --- /dev/null +++ b/packages/design-system/tests/component/pagination/PaginationNext.spec.tsx @@ -0,0 +1,23 @@ +import { Pagination } from '../../../src/lib/components/pagination/Pagination' + +describe('PaginationNext component', () => { + it('should render correctly', () => { + cy.mount( {}} />) + cy.findByRole('button', { name: 'Next' }).should('exist') + }) + + it('should call onClick event', () => { + const onClick = cy.stub().resolves() + cy.mount() + + cy.findByRole('button', { name: 'Next' }).click() + + cy.wrap(onClick).should('be.calledOnce') + }) + + it('should be disabled', () => { + cy.mount( {}} disabled />) + cy.findByRole('button', { name: 'Next' }).should('not.exist') + cy.findByText('Next').should('exist') + }) +}) diff --git a/packages/design-system/tests/component/pagination/PaginationPrev.spec.tsx b/packages/design-system/tests/component/pagination/PaginationPrev.spec.tsx new file mode 100644 index 000000000..5a87ef501 --- /dev/null +++ b/packages/design-system/tests/component/pagination/PaginationPrev.spec.tsx @@ -0,0 +1,23 @@ +import { Pagination } from '../../../src/lib/components/pagination/Pagination' + +describe('PaginationPrev component', () => { + it('should render correctly', () => { + cy.mount( {}} />) + cy.findByRole('button', { name: 'Previous' }).should('exist') + }) + + it('should call onClick event', () => { + const onClick = cy.stub().resolves() + cy.mount() + + cy.findByRole('button', { name: 'Previous' }).click() + + cy.wrap(onClick).should('be.calledOnce') + }) + + it('should be disabled', () => { + cy.mount( {}} disabled />) + cy.findByRole('button', { name: 'Previous' }).should('not.exist') + cy.findByText('Previous').should('exist') + }) +}) diff --git a/src/sections/dataset/dataset-citation/DatasetCitation.module.scss b/src/sections/dataset/dataset-citation/DatasetCitation.module.scss index ea2a500d4..fb61cf5e7 100644 --- a/src/sections/dataset/dataset-citation/DatasetCitation.module.scss +++ b/src/sections/dataset/dataset-citation/DatasetCitation.module.scss @@ -1,4 +1,4 @@ -@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/colors.module"; +@import "node_modules/dataverse-design-system/src/lib/assets/styles/design-tokens/colors.module"; .container { diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss index 5152151e8..fefa3916a 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.module.scss @@ -1,5 +1,5 @@ -@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/typography.module"; -@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/colors.module"; +@import "node_modules/dataverse-design-system/src/lib/assets/styles/design-tokens/typography.module"; +@import "node_modules/dataverse-design-system/src/lib/assets/styles/design-tokens/colors.module"; .container { display: flex; diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboard.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboard.module.scss index 1efffcf49..a901ca60d 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboard.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboard.module.scss @@ -1,4 +1,4 @@ -@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/colors.module"; +@import "node_modules/dataverse-design-system/src/lib/assets/styles/design-tokens/colors.module"; .container { margin-left: 5px; diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss index ccbe5b1aa..211975f9c 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.module.scss @@ -1,5 +1,5 @@ -@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/typography.module"; -@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/colors.module"; +@import "node_modules/dataverse-design-system/src/lib/assets/styles/design-tokens/typography.module"; +@import "node_modules/dataverse-design-system/src/lib/assets/styles/design-tokens/colors.module"; .thumbnail { max-width: 64px; diff --git a/src/sections/hello-dataverse/HelloDataverse.module.scss b/src/sections/hello-dataverse/HelloDataverse.module.scss index d7898b46d..d5dcc3a44 100644 --- a/src/sections/hello-dataverse/HelloDataverse.module.scss +++ b/src/sections/hello-dataverse/HelloDataverse.module.scss @@ -1,4 +1,4 @@ -@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/colors.module"; +@import "node_modules/dataverse-design-system/src/lib/assets/styles/design-tokens/colors.module"; @import "src/sections/assets/variables"; .container { diff --git a/src/sections/layout/footer/Footer.module.scss b/src/sections/layout/footer/Footer.module.scss index b9e3407d8..28eedebc1 100644 --- a/src/sections/layout/footer/Footer.module.scss +++ b/src/sections/layout/footer/Footer.module.scss @@ -1,5 +1,5 @@ -@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/colors.module"; -@import "node_modules/dataverse-design-system/src/lib/components/assets/styles/design-tokens/typography.module"; +@import "node_modules/dataverse-design-system/src/lib/assets/styles/design-tokens/colors.module"; +@import "node_modules/dataverse-design-system/src/lib/assets/styles/design-tokens/typography.module"; .container { padding: 60px 0; From a92ba33373fe9cfc1c7a482307424edfe822ddb4 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Fri, 30 Jun 2023 18:07:17 +0200 Subject: [PATCH 10/30] feat(DatasetFiles): add stories --- .../dataset/dataset-files/DatasetFiles.tsx | 2 +- src/stories/dataset/Dataset.stories.tsx | 10 +-- .../dataset-files/DatasetFiles.stories.tsx | 48 ++++++++++++ .../file-info-cell/FileInfoCell.stories.tsx | 41 ++++++++++ .../file-thumbnail/FileThumbnail.stories.tsx | 77 +++++++++++++++++++ .../TablePagination.stories.tsx | 45 +++++++++++ .../files/FileMockLoadingRepository.ts | 13 ++++ src/stories/files/FileMockNoDataRepository.ts | 13 ++++ src/stories/files/FileMockRepository.ts | 2 +- .../files/domain/models/FileMother.ts | 68 ++++++++++++++++ 10 files changed, 312 insertions(+), 7 deletions(-) create mode 100644 src/stories/dataset/dataset-files/DatasetFiles.stories.tsx create mode 100644 src/stories/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.stories.tsx create mode 100644 src/stories/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.stories.tsx create mode 100644 src/stories/dataset/dataset-files/files-table/table-pagination/TablePagination.stories.tsx create mode 100644 src/stories/files/FileMockLoadingRepository.ts create mode 100644 src/stories/files/FileMockNoDataRepository.ts diff --git a/src/sections/dataset/dataset-files/DatasetFiles.tsx b/src/sections/dataset/dataset-files/DatasetFiles.tsx index c29ee1f39..da8e6c9f2 100644 --- a/src/sections/dataset/dataset-files/DatasetFiles.tsx +++ b/src/sections/dataset/dataset-files/DatasetFiles.tsx @@ -21,7 +21,7 @@ export function DatasetFiles({ useEffect(() => { setFilesTableData(files) - }) + }, [files]) if (isLoading) { return diff --git a/src/stories/dataset/Dataset.stories.tsx b/src/stories/dataset/Dataset.stories.tsx index b2a24f44b..33dc6c09d 100644 --- a/src/stories/dataset/Dataset.stories.tsx +++ b/src/stories/dataset/Dataset.stories.tsx @@ -6,7 +6,7 @@ import { WithLayoutLoading } from '../WithLayoutLoading' import { WithAnonymizedView } from './WithAnonymizedView' import { DatasetMockRepository } from './DatasetMockRepository' import { DatasetMockNoDataRepository } from './DatasetMockNoDataRepository' -import { FilesMockRepository } from '../files/FileMockRepository' +import { FileMockRepository } from '../files/FileMockRepository' const meta: Meta = { title: 'Pages/Dataset', @@ -26,7 +26,7 @@ export const Default: Story = { render: () => ( ) @@ -37,7 +37,7 @@ export const Loading: Story = { render: () => ( ) @@ -48,7 +48,7 @@ export const DatasetNotFound: Story = { render: () => ( ) @@ -59,7 +59,7 @@ export const DatasetAnonymizedView: Story = { render: () => ( ) diff --git a/src/stories/dataset/dataset-files/DatasetFiles.stories.tsx b/src/stories/dataset/dataset-files/DatasetFiles.stories.tsx new file mode 100644 index 000000000..f1a49aa5a --- /dev/null +++ b/src/stories/dataset/dataset-files/DatasetFiles.stories.tsx @@ -0,0 +1,48 @@ +import { Meta, StoryObj } from '@storybook/react' +import { WithI18next } from '../../WithI18next' +import { DatasetFiles } from '../../../sections/dataset/dataset-files/DatasetFiles' +import { DatasetMockData } from '../DatasetMockData' +import { FileMockRepository } from '../../files/FileMockRepository' +import { FileMockLoadingRepository } from '../../files/FileMockLoadingRepository' +import { FileMockNoDataRepository } from '../../files/FileMockNoDataRepository' + +const meta: Meta = { + title: 'Sections/Dataset Page/DatasetFiles', + component: DatasetFiles, + decorators: [WithI18next] +} + +export default meta +type Story = StoryObj + +const testDataset = DatasetMockData() + +export const Default: Story = { + render: () => ( + + ) +} + +export const Loading: Story = { + render: () => ( + + ) +} + +export const NoFiles: Story = { + render: () => ( + + ) +} diff --git a/src/stories/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.stories.tsx b/src/stories/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.stories.tsx new file mode 100644 index 000000000..7fb7efda6 --- /dev/null +++ b/src/stories/dataset/dataset-files/files-table/file-info-cell/FileInfoCell.stories.tsx @@ -0,0 +1,41 @@ +import { Meta, StoryObj } from '@storybook/react' +import { WithI18next } from '../../../../WithI18next' +import { FileInfoCell } from '../../../../../sections/dataset/dataset-files/files-table/file-info-cell/FileInfoCell' +import { FileMother } from '../../../../../../tests/component/files/domain/models/FileMother' + +const meta: Meta = { + title: 'Sections/Dataset Page/DatasetFiles/FilesTable/FileInfoCell', + component: FileInfoCell, + decorators: [WithI18next] +} + +export default meta +type Story = StoryObj + +export const Default: Story = { + render: () => +} + +export const WithLabels: Story = { + render: () => +} + +export const WithDirectory: Story = { + render: () => +} + +export const WithEmbargo: Story = { + render: () => +} + +export const WithTabularData: Story = { + render: () => +} + +export const WithDescription: Story = { + render: () => +} + +export const WithChecksum: Story = { + render: () => +} diff --git a/src/stories/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.stories.tsx b/src/stories/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.stories.tsx new file mode 100644 index 000000000..06da5cdc1 --- /dev/null +++ b/src/stories/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail.stories.tsx @@ -0,0 +1,77 @@ +import { Meta, StoryObj } from '@storybook/react' +import { faker } from '@faker-js/faker' +import { FileThumbnail } from '../../../../../../sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnail' +import { WithI18next } from '../../../../../WithI18next' +import { FileMother } from '../../../../../../../tests/component/files/domain/models/FileMother' + +const meta: Meta = { + title: 'Sections/Dataset Page/DatasetFiles/FilesTable/FileInfoCell/FileThumbnail', + component: FileThumbnail, + decorators: [WithI18next] +} + +export default meta +type Story = StoryObj + +export const WithIcon: Story = { + render: () => { + const file = FileMother.create({ + type: 'some-type', + access: { restricted: false, canDownload: true }, + thumbnail: undefined + }) + return ( + + ) + } +} + +export const WithThumbnailPreview: Story = { + render: () => { + const file = FileMother.create({ + access: { restricted: false, canDownload: true }, + thumbnail: faker.image.imageUrl() + }) + return ( + + ) + } +} + +export const WithThumbnailRestrictedLockedIcon: Story = { + render: () => { + const file = FileMother.create({ access: { restricted: true, canDownload: false } }) + return ( + + ) + } +} + +export const WithThumbnailRestrictedUnlockedIcon: Story = { + render: () => { + const file = FileMother.create({ access: { restricted: true, canDownload: true } }) + return ( + + ) + } +} diff --git a/src/stories/dataset/dataset-files/files-table/table-pagination/TablePagination.stories.tsx b/src/stories/dataset/dataset-files/files-table/table-pagination/TablePagination.stories.tsx new file mode 100644 index 000000000..fe3788326 --- /dev/null +++ b/src/stories/dataset/dataset-files/files-table/table-pagination/TablePagination.stories.tsx @@ -0,0 +1,45 @@ +import { Meta, StoryObj } from '@storybook/react' +import { WithI18next } from '../../../../WithI18next' +import { TablePagination } from '../../../../../sections/dataset/dataset-files/files-table/table-pagination/TablePagination' + +const meta: Meta = { + title: 'Sections/Dataset Page/DatasetFiles/FilesTable/TablePagination', + component: TablePagination, + decorators: [WithI18next] +} + +export default meta +type Story = StoryObj + +const emptyFunction = () => {} +export const Default: Story = { + render: () => ( + + ) +} + +export const NoEllipsis: Story = { + render: () => ( + + ) +} diff --git a/src/stories/files/FileMockLoadingRepository.ts b/src/stories/files/FileMockLoadingRepository.ts new file mode 100644 index 000000000..214d5e432 --- /dev/null +++ b/src/stories/files/FileMockLoadingRepository.ts @@ -0,0 +1,13 @@ +import { FileRepository } from '../../files/domain/repositories/FileRepository' +import { File } from '../../files/domain/models/File' + +export class FileMockLoadingRepository implements FileRepository { + // eslint-disable-next-line unused-imports/no-unused-vars + getAllByDatasetPersistentId(persistentId: string, version?: string): Promise { + return new Promise((resolve) => { + setTimeout(() => { + // Do nothing + }, 0) + }) + } +} diff --git a/src/stories/files/FileMockNoDataRepository.ts b/src/stories/files/FileMockNoDataRepository.ts new file mode 100644 index 000000000..9409b01c8 --- /dev/null +++ b/src/stories/files/FileMockNoDataRepository.ts @@ -0,0 +1,13 @@ +import { FileRepository } from '../../files/domain/repositories/FileRepository' +import { File } from '../../files/domain/models/File' + +export class FileMockNoDataRepository implements FileRepository { + // eslint-disable-next-line unused-imports/no-unused-vars + getAllByDatasetPersistentId(persistentId: string, version?: string): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve([]) + }, 1000) + }) + } +} diff --git a/src/stories/files/FileMockRepository.ts b/src/stories/files/FileMockRepository.ts index 422367fdb..826dea01a 100644 --- a/src/stories/files/FileMockRepository.ts +++ b/src/stories/files/FileMockRepository.ts @@ -2,7 +2,7 @@ import { FileRepository } from '../../files/domain/repositories/FileRepository' import { FilesMockData } from './FileMockData' import { File } from '../../files/domain/models/File' -export class FilesMockRepository implements FileRepository { +export class FileMockRepository implements FileRepository { // eslint-disable-next-line unused-imports/no-unused-vars getAllByDatasetPersistentId(persistentId: string, version?: string): Promise { return new Promise((resolve) => { diff --git a/tests/component/files/domain/models/FileMother.ts b/tests/component/files/domain/models/FileMother.ts index 9f46e2607..278d1fe06 100644 --- a/tests/component/files/domain/models/FileMother.ts +++ b/tests/component/files/domain/models/FileMother.ts @@ -97,4 +97,72 @@ export class FileMother { static createMany(quantity: number): File[] { return Array.from({ length: quantity }).map(() => this.create()) } + + static createDefault(props?: Partial): File { + const defaultFile = { + type: 'file', + version: { + majorNumber: 1, + minorNumber: 0, + status: FileStatus.RELEASED + }, + access: { restricted: false, canDownload: true }, + labels: [], + checksum: undefined, + thumbnail: undefined, + directory: undefined, + embargo: undefined, + tabularData: undefined, + description: undefined, + ...props + } + return this.create(defaultFile) + } + + static createWithLabels(): File { + return this.createDefault({ + labels: faker.helpers.arrayElements([ + createFakeFileLabel(), + createFakeFileLabel(), + createFakeFileLabel(), + createFakeFileLabel() + ]) + }) + } + + static createWithDirectory(): File { + return this.createDefault({ directory: faker.system.directoryPath() }) + } + + static createWithEmbargo(): File { + return this.createDefault({ + embargo: { + active: true, + date: faker.date.future().toDateString() + } + }) + } + + static createWithTabularData(): File { + return this.createDefault({ + type: 'tabular data', + tabularData: { + variablesCount: faker.datatype.number(100), + observationsCount: faker.datatype.number(100), + unf: `UNF:${faker.datatype.uuid()}==` + } + }) + } + + static createWithDescription(): File { + return this.createDefault({ + description: faker.lorem.paragraph() + }) + } + + static createWithChecksum(): File { + return this.createDefault({ + checksum: faker.datatype.uuid() + }) + } } From ca561f6c0a9a88d04b7f8cfd4119331d04256a46 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 3 Jul 2023 10:25:08 +0200 Subject: [PATCH 11/30] feat(DatasetFiles): add internationalization --- public/locales/en/files.json | 38 ++++++++++++++++--- .../dataset/dataset-files/DatasetFiles.tsx | 2 +- .../files-table/file-info-cell/FileDate.tsx | 2 +- .../file-info-cell/FileDownloads.tsx | 6 ++- .../file-info-cell/FileEmbargoDate.tsx | 6 ++- .../file-info-cell/FileTabularData.tsx | 7 +++- .../CopyToClipboardButton.tsx | 12 ++++-- .../FileThumbnailRestrictedIcon.tsx | 14 ++++++- .../spinner-symbol/SpinnerSymbol.module.scss | 3 ++ .../spinner-symbol}/SpinnerSymbol.tsx | 7 +++- .../table-pagination/PageSizeSelector.tsx | 12 ++++-- .../files/FileMockLoadingRepository.ts | 2 +- 12 files changed, 86 insertions(+), 25 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/spinner-symbol/SpinnerSymbol.module.scss rename src/sections/dataset/dataset-files/{ => files-table/spinner-symbol}/SpinnerSymbol.tsx (67%) diff --git a/public/locales/en/files.json b/public/locales/en/files.json index 95a98e619..c6c6d90fe 100644 --- a/public/locales/en/files.json +++ b/public/locales/en/files.json @@ -1,8 +1,34 @@ { - "metadataReleased": "Metadata Released", - "published": "Published", - "deposited": "Deposited", - "embargoedWillBeUntil": "Draft: will be embargoed until", - "embargoedUntil": "Embargoed until", - "embargoedWasThrough": "Was embargoed until" + "filesLoading": "Files loading spinner symbol", + "table": { + "pagination": { + "pageSize": "Files per page" + }, + "tabularData": { + "variables": "Variables", + "observations": "Observations" + }, + "embargoDate": { + "embargoedWillBeUntil": "Draft: will be embargoed until", + "embargoedUntil": "Embargoed until", + "embargoedWasThrough": "Was embargoed until" + }, + "downloads": "Downloads", + "date": { + "metadataReleased": "Metadata Released", + "published": "Published", + "deposited": "Deposited" + }, + "thumbnail": { + "restricted": { + "locked": "Locked File Icon", + "unlocked": "Unlocked File Icon" + } + }, + "copyToClipboard": { + "clickToCopy": "Click to copy", + "correctlyCopiedIcon": "Correctly copied to clipboard icon", + "copyToClipboardIcon": "Copy to clipboard icon" + } + } } diff --git a/src/sections/dataset/dataset-files/DatasetFiles.tsx b/src/sections/dataset/dataset-files/DatasetFiles.tsx index da8e6c9f2..b3e5d26ca 100644 --- a/src/sections/dataset/dataset-files/DatasetFiles.tsx +++ b/src/sections/dataset/dataset-files/DatasetFiles.tsx @@ -3,7 +3,7 @@ import { FileRepository } from '../../../files/domain/repositories/FileRepositor import { useFiles } from './useFiles' import { useEffect } from 'react' import { FilesTable } from './files-table/FilesTable' -import { SpinnerSymbol } from './SpinnerSymbol' +import { SpinnerSymbol } from './files-table/spinner-symbol/SpinnerSymbol' interface DatasetFilesProps { filesRepository: FileRepository diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDate.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDate.tsx index e32f240a0..c1e40ad39 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDate.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDate.tsx @@ -6,7 +6,7 @@ export function FileDate({ date }: { date: FileDateModel }) { return (
- {t(date.type)} {date.date} + {t(`table.date.${date.type}`)} {date.date}
) diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDownloads.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDownloads.tsx index 51f84f13d..7fe3c8e8e 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDownloads.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileDownloads.tsx @@ -1,17 +1,21 @@ import { FileStatus } from '../../../../../files/domain/models/File' +import { useTranslation } from 'react-i18next' interface FileDownloadsProps { downloads: number status: FileStatus } export function FileDownloads({ downloads, status }: FileDownloadsProps) { + const { t } = useTranslation('files') if (status !== FileStatus.RELEASED) { return <> } return (
- {downloads} Downloads + + {downloads} {t('table.downloads')} +
) } diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileEmbargoDate.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileEmbargoDate.tsx index 02ec72bc6..154141647 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileEmbargoDate.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileEmbargoDate.tsx @@ -24,8 +24,10 @@ export function FileEmbargoDate({ embargo, status }: FileEmbargoDateProps) { const embargoTypeOfDate = (embargoIsActive: boolean, status: FileStatus) => { if (status === FileStatus.RELEASED) { - return embargoIsActive ? 'embargoedUntil' : 'embargoedWasThrough' + return embargoIsActive + ? 'table.embargoDate.embargoedUntil' + : 'table.embargoDate.embargoedWasThrough' } - return 'embargoedWillBeUntil' + return 'table.embargoDate.embargoedWillBeUntil' } diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileTabularData.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileTabularData.tsx index b69843e82..b14e8ef09 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/FileTabularData.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/FileTabularData.tsx @@ -1,18 +1,21 @@ import { FileTabularData as FileTabularDataModel } from '../../../../../files/domain/models/File' import { CopyToClipboardButton } from './copy-to-clipboard-button/CopyToClipboardButton' +import { useTranslation } from 'react-i18next' export function FileTabularData({ tabularData }: { tabularData: FileTabularDataModel | undefined }) { + const { t } = useTranslation('files') if (!tabularData) { return <> } return (
- {tabularData.variablesCount} Variables, {tabularData.observationsCount} Observations{' '} - {tabularData.unf} + {tabularData.variablesCount} {t('table.tabularData.variables')},{' '} + {tabularData.observationsCount} {t('table.tabularData.observations')} {tabularData.unf}{' '} +
) } diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboardButton.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboardButton.tsx index 5a3abd79d..ac8c88822 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboardButton.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/copy-to-clipboard-button/CopyToClipboardButton.tsx @@ -2,8 +2,10 @@ import { Check, ClipboardPlusFill } from 'react-bootstrap-icons' import { OverlayTrigger } from 'dataverse-design-system' import { useState } from 'react' import styles from './CopyToClipboard.module.scss' +import { useTranslation } from 'react-i18next' export function CopyToClipboardButton({ text }: { text: string }) { + const { t } = useTranslation('files') const [copied, setCopied] = useState(false) const copyToClipboard = () => { navigator.clipboard @@ -19,12 +21,16 @@ export function CopyToClipboardButton({ text }: { text: string }) { } return ( - + {copied ? ( - + ) : ( - + )} diff --git a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx index 59103ca6b..629eef7ac 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info-cell/file-thumbnail/FileThumbnailRestrictedIcon.tsx @@ -1,18 +1,28 @@ import { Lock, Unlock } from 'react-bootstrap-icons' import styles from './FileThumbnail.module.scss' +import { useTranslation } from 'react-i18next' export function FileThumbnailRestrictedIcon({ locked }: { locked: boolean }) { + const { t } = useTranslation('files') if (locked) { return (
- +
) } return (
- +
) } diff --git a/src/sections/dataset/dataset-files/files-table/spinner-symbol/SpinnerSymbol.module.scss b/src/sections/dataset/dataset-files/files-table/spinner-symbol/SpinnerSymbol.module.scss new file mode 100644 index 000000000..76bb5cf0f --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/spinner-symbol/SpinnerSymbol.module.scss @@ -0,0 +1,3 @@ +.container { + justify-content: center; +} \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/SpinnerSymbol.tsx b/src/sections/dataset/dataset-files/files-table/spinner-symbol/SpinnerSymbol.tsx similarity index 67% rename from src/sections/dataset/dataset-files/SpinnerSymbol.tsx rename to src/sections/dataset/dataset-files/files-table/spinner-symbol/SpinnerSymbol.tsx index 43be7a5d9..eac4e9038 100644 --- a/src/sections/dataset/dataset-files/SpinnerSymbol.tsx +++ b/src/sections/dataset/dataset-files/files-table/spinner-symbol/SpinnerSymbol.tsx @@ -1,15 +1,18 @@ import { Col, Row, useTheme } from 'dataverse-design-system' import { TailSpin } from 'react-loader-spinner' +import styles from './SpinnerSymbol.module.scss' +import { useTranslation } from 'react-i18next' export function SpinnerSymbol() { const theme = useTheme() + const { t } = useTranslation('files') return ( - + void }) { + const { t } = useTranslation('files') + const availableSizes = [10, 25, 50] + return (
-