diff --git a/.storybook/main.ts b/.storybook/main.ts index ab07f18b3..ef54f9991 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -15,7 +15,6 @@ const config: StorybookConfig = { options: {} }, docs: {}, - staticDirs: ['../public'], typescript: { reactDocgen: false } diff --git a/CHANGELOG.md b/CHANGELOG.md index c47422088..2574ef773 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,9 +10,13 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel - Dataset Templates UI integration, including create/edit flows, previews, and skeleton states. - Dataset Page: added a sidebar to show dataset reviews +- Dataset Page: "Styled Citation" now supports selecting any CSL citation style and renders the citation formatted in that style, using citeproc-js in the browser. +- Dataset Page: added a copy icon in front of "Cite Dataset" to support a quick copy of citation in default style. ### Changed +- Hide "Export Metadata" on dataset and file pages that are not for the latest published dataset version. +- Show "Export Metadata" on dataset and file pages for draft version. - Avoided prop-drilling for file, guestbook, user and external tool repository, so used context to share repository instances. ### Fixed diff --git a/package-lock.json b/package-lock.json index 34a5bd68e..5356687f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@dnd-kit/sortable": "8.0.0", "@dnd-kit/utilities": "3.2.2", "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.2.0-alpha.10", + "@iqss/dataverse-client-javascript": "2.2.0-alpha.14", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", @@ -27,6 +27,7 @@ "ajv-draft-04": "1.0.0", "async-mutex": "0.5.0", "bootstrap": "5.2.3", + "citeproc": "2.4.63", "classnames": "2.5.1", "dompurify": "3.2.7", "html-react-parser": "3.0.16", @@ -230,93 +231,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", - "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.28.5", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", - "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "regexpu-core": "^6.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", - "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "debug": "^4.4.3", - "lodash.debounce": "^4.0.8", - "resolve": "^1.22.11" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -326,21 +240,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", - "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", @@ -371,20 +270,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", @@ -394,59 +279,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", - "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.28.5", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -474,22 +306,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", - "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helpers": { "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", @@ -518,109 +334,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", - "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", - "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.27.1", - "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.27.1.tgz", - "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", - "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "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, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -676,23 +389,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", - "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", @@ -700,922 +396,7 @@ "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", - "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.29.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", - "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-remap-async-to-generator": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", - "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", - "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", - "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", - "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-replace-supers": "^7.28.6", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", - "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/template": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", - "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", - "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", - "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", - "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", - "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", - "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", - "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", - "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", - "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.29.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", - "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", - "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", - "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", - "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", - "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", - "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", - "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", - "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", - "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1624,48 +405,37 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", - "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", - "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { + "node_modules/@babel/plugin-syntax-jsx": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", - "dev": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1676,119 +446,92 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", - "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", - "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1797,16 +540,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1815,102 +556,30 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", - "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz", - "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/compat-data": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.28.6", - "@babel/plugin-syntax-import-attributes": "^7.28.6", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.29.0", - "@babel/plugin-transform-async-to-generator": "^7.28.6", - "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.6", - "@babel/plugin-transform-class-properties": "^7.28.6", - "@babel/plugin-transform-class-static-block": "^7.28.6", - "@babel/plugin-transform-classes": "^7.28.6", - "@babel/plugin-transform-computed-properties": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-dotall-regex": "^7.28.6", - "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", - "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.6", - "@babel/plugin-transform-exponentiation-operator": "^7.28.6", - "@babel/plugin-transform-export-namespace-from": "^7.27.1", - "@babel/plugin-transform-for-of": "^7.27.1", - "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.28.6", - "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", - "@babel/plugin-transform-member-expression-literals": "^7.27.1", - "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.28.6", - "@babel/plugin-transform-modules-systemjs": "^7.29.0", - "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", - "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", - "@babel/plugin-transform-numeric-separator": "^7.28.6", - "@babel/plugin-transform-object-rest-spread": "^7.28.6", - "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.28.6", - "@babel/plugin-transform-optional-chaining": "^7.28.6", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.28.6", - "@babel/plugin-transform-private-property-in-object": "^7.28.6", - "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.29.0", - "@babel/plugin-transform-regexp-modifiers": "^7.28.6", - "@babel/plugin-transform-reserved-words": "^7.27.1", - "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.28.6", - "@babel/plugin-transform-sticky-regex": "^7.27.1", - "@babel/plugin-transform-template-literals": "^7.27.1", - "@babel/plugin-transform-typeof-symbol": "^7.27.1", - "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.28.6", - "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.15", - "babel-plugin-polyfill-corejs3": "^0.14.0", - "babel-plugin-polyfill-regenerator": "^0.6.6", - "core-js-compat": "^3.48.0", - "semver": "^6.3.1" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1919,20 +588,20 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { @@ -3285,9 +1954,9 @@ } }, "node_modules/@iqss/dataverse-client-javascript": { - "version": "2.2.0-alpha.10", - "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.2.0-alpha.10/1fcacf53d38b344ea8502ad68aaa69c9eeb66348", - "integrity": "sha512-qQx0dLZHEeR4FJh0J4eb7D5sXE+S+PpXB1u8AiySFN4FKXu0wSf50bGEJbmyTqmmvtwfrjuUB2YKl1mCB1rZrg==", + "version": "2.2.0-alpha.14", + "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.2.0-alpha.14/a89f8485fb6d2f6267be0a42c5db1711357eed95", + "integrity": "sha512-zXYIXoh074Wr31DCyNprUMssxrI1ySa/8XqoknPI/Ye5lf1/XjdoJirT/iJ+mr9p8y8IdLdBTp2eT0ICV74JuQ==", "license": "MIT", "dependencies": { "@types/node": "^18.15.11", @@ -4792,18 +3461,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "devOptional": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -7019,6 +5676,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7032,6 +5690,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7045,6 +5704,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7058,6 +5718,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7071,6 +5732,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7084,6 +5746,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7097,6 +5760,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7110,6 +5774,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7123,6 +5788,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7136,6 +5802,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7149,6 +5816,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7162,6 +5830,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7175,6 +5844,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7188,6 +5858,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7201,6 +5872,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7214,6 +5886,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7227,6 +5900,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7240,6 +5914,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7253,6 +5928,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7266,6 +5942,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7279,6 +5956,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -7292,6 +5970,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8794,6 +7473,7 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", @@ -9574,34 +8254,11 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, "license": "MIT" }, "node_modules/@types/graceful-fs": { @@ -10408,198 +9065,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true - }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", @@ -10680,7 +9145,7 @@ "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -10700,20 +9165,6 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -10761,6 +9212,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", @@ -10818,20 +9270,6 @@ } } }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -10937,6 +9375,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, "license": "MIT", "dependencies": { "default-require-extensions": "^3.0.0" @@ -10977,6 +9416,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, "license": "MIT" }, "node_modules/argparse": { @@ -11349,154 +9789,6 @@ "@babel/core": "^7.8.0" } }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/yocto-queue": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -11564,51 +9856,6 @@ "dev": true, "license": "MIT" }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", - "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-define-polyfill-provider": "^0.6.8", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", - "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.8", - "core-js-compat": "^3.48.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", - "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.8" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.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", @@ -12004,7 +10251,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/byte-size": { @@ -12112,6 +10359,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, "license": "MIT", "dependencies": { "hasha": "^5.0.0", @@ -12127,6 +10375,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "license": "MIT", "dependencies": { "semver": "^6.0.0" @@ -12142,6 +10391,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", @@ -12436,17 +10686,6 @@ } } }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/ci-info": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", @@ -12462,6 +10701,12 @@ "node": ">=8" } }, + "node_modules/citeproc": { + "version": "2.4.63", + "resolved": "https://registry.npmjs.org/citeproc/-/citeproc-2.4.63.tgz", + "integrity": "sha512-68F95Bp4UbgZU/DBUGQn0qV3HDZLCdI9+Bb2ByrTaNJDL5VEm9LqaiNaxljsvoaExSLEXe1/r6n2Z06SCzW3/Q==", + "license": "CPAL-1.0 OR AGPL-1.0" + }, "node_modules/cjs-module-lexer": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", @@ -12479,6 +10724,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12815,14 +11061,6 @@ "dev": true, "license": "ISC" }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true, - "license": "ISC", - "peer": true - }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -12837,6 +11075,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, "license": "MIT" }, "node_modules/compare-func": { @@ -13065,21 +11304,6 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "license": "MIT" }, - "node_modules/core-js-compat": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", - "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "browserslist": "^4.28.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -13202,6 +11426,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -13593,6 +11818,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -13726,6 +11952,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, "license": "MIT", "dependencies": { "strip-bom": "^4.0.0" @@ -14248,12 +12475,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -14264,6 +12493,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -14283,21 +12513,6 @@ "once": "^1.4.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", - "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", @@ -14471,14 +12686,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", - "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -14541,6 +12748,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, "license": "MIT" }, "node_modules/esbuild": { @@ -15226,17 +13434,6 @@ "dev": true, "license": "MIT" }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -15570,6 +13767,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, "license": "MIT", "dependencies": { "commondir": "^1.0.1", @@ -15587,6 +13785,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "license": "MIT", "dependencies": { "semver": "^6.0.0" @@ -15865,6 +14064,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, "funding": [ { "type": "github", @@ -16047,6 +14247,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -16517,14 +14718,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true - }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -16832,6 +15025,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, "license": "MIT", "dependencies": { "is-stream": "^2.0.0", @@ -16848,6 +15042,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" @@ -16950,6 +15145,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, "license": "MIT" }, "node_modules/html-parse-stringify": { @@ -17259,6 +15455,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -17684,6 +15881,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -17936,6 +16134,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -18010,6 +16209,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, "license": "MIT" }, "node_modules/is-unc-path": { @@ -18132,6 +16332,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/isstream": { @@ -18145,6 +16346,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" @@ -18154,6 +16356,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "append-transform": "^2.0.0" @@ -18206,6 +16409,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, "license": "ISC", "dependencies": { "archy": "^1.0.0", @@ -18223,6 +16427,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" @@ -18232,6 +16437,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" @@ -18244,6 +16450,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -18253,6 +16460,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", @@ -18267,6 +16475,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", @@ -18281,6 +16490,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", @@ -21932,21 +20142,6 @@ "node": ">=8" } }, - "node_modules/loader-runner": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", - "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -21969,18 +20164,11 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, - "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, - "license": "MIT", - "peer": 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, "license": "MIT" }, "node_modules/lodash.get": { @@ -22161,6 +20349,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, "license": "MIT", "dependencies": { "semver": "^7.5.3" @@ -22176,6 +20365,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -23504,6 +21694,7 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, "funding": [ { "type": "github", @@ -23819,6 +22010,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, "license": "MIT", "dependencies": { "process-on-spawn": "^1.0.0" @@ -24268,6 +22460,7 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", @@ -24309,6 +22502,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -24320,12 +22514,14 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, "license": "MIT" }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -24339,6 +22535,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -24353,6 +22550,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -24373,6 +22571,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.7.5", @@ -24388,6 +22587,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -24400,6 +22600,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "license": "MIT", "dependencies": { "semver": "^6.0.0" @@ -24415,6 +22616,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -24430,6 +22632,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -24442,6 +22645,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" @@ -24454,6 +22658,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -24463,6 +22668,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -24477,12 +22683,14 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, "license": "MIT", "dependencies": { "cliui": "^6.0.0", @@ -24505,6 +22713,7 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, "license": "ISC", "dependencies": { "camelcase": "^5.0.0", @@ -24977,6 +23186,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, "license": "ISC", "dependencies": { "graceful-fs": "^4.1.15", @@ -25514,6 +23724,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -25633,6 +23844,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "license": "MIT", "dependencies": { "find-up": "^4.0.0" @@ -25645,6 +23857,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -25658,6 +23871,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -25670,6 +23884,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -25685,6 +23900,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -25766,6 +23982,7 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -25987,6 +24204,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "dev": true, "license": "MIT", "dependencies": { "fromentries": "^1.2.0" @@ -26461,6 +24679,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -26562,6 +24781,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -27152,28 +25372,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", - "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -27207,51 +25405,11 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/regexpu-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", - "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.2", - "regjsgen": "^0.8.0", - "regjsparser": "^0.13.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.2.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/regjsparser": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", - "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "jsesc": "~3.1.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, "license": "ISC", "dependencies": { "es6-error": "^4.0.1" @@ -27358,6 +25516,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -27376,6 +25535,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, "license": "ISC" }, "node_modules/requireindex": { @@ -27534,6 +25694,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -27550,6 +25711,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -27570,6 +25732,7 @@ "version": "4.52.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.2.tgz", "integrity": "sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -27748,7 +25911,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/sass": { @@ -27785,49 +25948,10 @@ "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "loose-envify": "^1.1.0" } }, "node_modules/semver": { @@ -27843,6 +25967,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, "license": "ISC" }, "node_modules/set-function-length": { @@ -27902,6 +26027,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -27914,6 +26040,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -28008,6 +26135,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, "license": "ISC" }, "node_modules/sigstore": { @@ -28157,6 +26285,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -28203,6 +26332,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^2.0.0", @@ -28220,6 +26350,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -28233,6 +26364,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -28242,6 +26374,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "license": "MIT", "dependencies": { "semver": "^6.0.0" @@ -28483,6 +26616,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -28600,6 +26734,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -28626,6 +26761,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -29381,21 +27517,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/tapable": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", - "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -29511,114 +27632,6 @@ "node": ">=4" } }, - "node_modules/terser": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.2.tgz", - "integrity": "sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==", - "devOptional": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true, - "license": "MIT", - "peer": true - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -30328,6 +28341,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" @@ -30416,54 +28430,6 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "license": "MIT" }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", - "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", - "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/unified": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", @@ -31034,6 +29000,7 @@ "version": "5.4.20", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", + "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", @@ -31209,6 +29176,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31225,6 +29193,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31241,6 +29210,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31257,6 +29227,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31273,6 +29244,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31289,6 +29261,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31305,6 +29278,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31321,6 +29295,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31337,6 +29312,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31353,6 +29329,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31369,6 +29346,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31385,6 +29363,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31401,6 +29380,7 @@ "cpu": [ "mips64el" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31417,6 +29397,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31433,6 +29414,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31449,6 +29431,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31465,6 +29448,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31481,6 +29465,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31497,6 +29482,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31513,6 +29499,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31529,6 +29516,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31545,6 +29533,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31561,6 +29550,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -31574,6 +29564,7 @@ "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -31788,21 +29779,6 @@ "loose-envify": "^1.0.0" } }, - "node_modules/watchpack": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", - "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -31829,66 +29805,6 @@ "node": ">=12" } }, - "node_modules/webpack": { - "version": "5.106.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz", - "integrity": "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.16.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.28.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.20.0", - "es-module-lexer": "^2.0.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "loader-runner": "^4.3.1", - "mime-db": "^1.54.0", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.17", - "watchpack": "^2.5.1", - "webpack-sources": "^3.3.4" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.4.0.tgz", - "integrity": "sha512-gHwIe1cgBvvfLeu1Yz/dcFpmHfKDVxxyqI+kzqmuxZED81z2ChxpyqPaWcNqigPywhaEke7AjSGga+kxY55gjQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", @@ -31896,17 +29812,6 @@ "dev": true, "license": "MIT" }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -31961,6 +29866,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -32041,6 +29947,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true, "license": "ISC" }, "node_modules/which-typed-array": { diff --git a/package.json b/package.json index 7d813db74..98c1c61ec 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@dnd-kit/sortable": "8.0.0", "@dnd-kit/utilities": "3.2.2", "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.2.0-alpha.10", + "@iqss/dataverse-client-javascript": "2.2.0-alpha.14", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", @@ -32,6 +32,7 @@ "ajv-draft-04": "1.0.0", "async-mutex": "0.5.0", "bootstrap": "5.2.3", + "citeproc": "2.4.63", "classnames": "2.5.1", "dompurify": "3.2.7", "html-react-parser": "3.0.16", diff --git a/packages/design-system/src/lib/components/select-advanced/SelectAdvanced.module.scss b/packages/design-system/src/lib/components/select-advanced/SelectAdvanced.module.scss index cc86a8093..cd5f164ed 100644 --- a/packages/design-system/src/lib/components/select-advanced/SelectAdvanced.module.scss +++ b/packages/design-system/src/lib/components/select-advanced/SelectAdvanced.module.scss @@ -138,6 +138,13 @@ } } + .option-group-header { + padding: 0.5rem 1rem 0.25rem; + color: $dv-text-color; + font-weight: $dv-font-weight-bold; + font-size: $dv-font-size; + } + .option-item { padding-block: 0; transition: background-color 0.1s ease-in-out; diff --git a/packages/design-system/src/lib/components/select-advanced/SelectAdvanced.tsx b/packages/design-system/src/lib/components/select-advanced/SelectAdvanced.tsx index 82520c7c1..49e51068a 100644 --- a/packages/design-system/src/lib/components/select-advanced/SelectAdvanced.tsx +++ b/packages/design-system/src/lib/components/select-advanced/SelectAdvanced.tsx @@ -18,7 +18,7 @@ import { useIsFirstRender } from './useIsFirstRender' export const DEFAULT_LOCALES = { select: 'Select...' } export const SELECT_MENU_SEARCH_DEBOUNCE_TIME = 400 -export type Option = { value: string; label: string } +export type Option = { value: string; label: string; group?: string } export type InputOptions = string[] | Option[] @@ -29,6 +29,7 @@ type BaseProps = { isInvalid?: boolean inputButtonId?: string locales?: { select?: string } + hidePlaceholderOption?: boolean } type SingleProps = BaseProps & { @@ -56,7 +57,8 @@ export const SelectAdvanced = forwardRef( isDisabled = false, isInvalid = false, inputButtonId, - locales + locales, + hidePlaceholderOption = false }: SelectAdvancedProps, ref: ForwardedRef ) => { @@ -194,6 +196,7 @@ export const SelectAdvanced = forwardRef( isSearchable={isSearchable} menuId={menuId} selectWord={locales?.select ?? DEFAULT_LOCALES.select} + hidePlaceholderOption={hidePlaceholderOption} /> ) diff --git a/packages/design-system/src/lib/components/select-advanced/SelectAdvancedMenu.tsx b/packages/design-system/src/lib/components/select-advanced/SelectAdvancedMenu.tsx index efaeb3e01..7b8df711d 100644 --- a/packages/design-system/src/lib/components/select-advanced/SelectAdvancedMenu.tsx +++ b/packages/design-system/src/lib/components/select-advanced/SelectAdvancedMenu.tsx @@ -1,4 +1,4 @@ -import { useId } from 'react' +import { Fragment, useId } from 'react' import { Dropdown as DropdownBS, Form as FormBS } from 'react-bootstrap' import { Option } from './SelectAdvanced' import styles from './SelectAdvanced.module.scss' @@ -16,6 +16,7 @@ interface SelectAdvancedMenuProps { isSearchable: boolean menuId: string selectWord: string + hidePlaceholderOption: boolean } export const SelectAdvancedMenu = (props: SelectAdvancedMenuProps) => { @@ -31,7 +32,8 @@ export const SelectAdvancedMenu = (props: SelectAdvancedMenuProps) => { handleClickOption, isSearchable, menuId, - selectWord + selectWord, + hidePlaceholderOption } = props const searchInputControlID = useId() @@ -40,6 +42,7 @@ export const SelectAdvancedMenu = (props: SelectAdvancedMenuProps) => { const menuOptions = filteredOptions.length > 0 ? filteredOptions : options const noOptionsFound = searchValue !== '' && filteredOptions.length === 0 + const showGroupHeaders = filteredOptions.length === 0 const selectedArray = Array.isArray(selected) ? selected : [selected] const allOptionsShownAreSelected = !noOptionsFound @@ -85,7 +88,7 @@ export const SelectAdvancedMenu = (props: SelectAdvancedMenuProps) => { )} - {!isMultiple && searchValue === '' && ( + {!isMultiple && !hidePlaceholderOption && searchValue === '' && ( { )} {!noOptionsFound && - menuOptions.map((opt) => { + menuOptions.map((opt, index) => { + const previousGroup = index > 0 ? menuOptions[index - 1].group : undefined + const groupHeader = + showGroupHeaders && opt.group !== undefined && opt.group !== previousGroup ? ( + + {opt.group} + + ) : null + if (!isMultiple) { return ( - handleClickOption(opt.value)} - active={selected === opt.value} - key={opt.value}> - {opt.label} - + + {groupHeader} + handleClickOption(opt.value)} + active={selected === opt.value}> + {opt.label} + + ) } return ( - - - + + {groupHeader} + + + + ) })} diff --git a/packages/design-system/tests/component/select-advanced/SelectAdvanced.spec.tsx b/packages/design-system/tests/component/select-advanced/SelectAdvanced.spec.tsx index 014979f71..089d71f8d 100644 --- a/packages/design-system/tests/component/select-advanced/SelectAdvanced.spec.tsx +++ b/packages/design-system/tests/component/select-advanced/SelectAdvanced.spec.tsx @@ -17,6 +17,13 @@ const vlOptions = [ { value: 'gardening', label: 'Gardening' } ] +const groupedOptions = [ + { value: 'reading', label: 'Reading', group: 'Indoor' }, + { value: 'cooking', label: 'Cooking', group: 'Indoor' }, + { value: 'swimming', label: 'Swimming', group: 'Outdoor' }, + { value: 'running', label: 'Running', group: 'Outdoor' } +] + describe('SelectAdvanced', () => { describe('should render correctly', () => { it('on single selection', () => { @@ -121,6 +128,78 @@ describe('SelectAdvanced', () => { }) }) + describe('should render group headers when options define a group', () => { + it('shows a header above each group in the unfiltered menu', () => { + cy.mount() + + toggleOptionsMenu() + + cy.findByText('Indoor').should('exist') + cy.findByText('Outdoor').should('exist') + cy.findAllByRole('option').should('have.length', 5) // 4 options + 1 Select... option + }) + + it('shows a header above each group on multiple selection', () => { + cy.mount() + + toggleOptionsMenu() + + cy.findByText('Indoor').should('exist') + cy.findByText('Outdoor').should('exist') + cy.findAllByRole('option').should('have.length', 4) + }) + + it('hides group headers once a search filters the options', () => { + cy.mount() + + toggleOptionsMenu() + cy.findByPlaceholderText('Search...').type('Reading') + + cy.findByText('Indoor').should('not.exist') + cy.findByText('Outdoor').should('not.exist') + cy.findByText('Reading').should('exist') + }) + + it('does not show any group header when options have no group', () => { + cy.mount( + + ) + + toggleOptionsMenu() + + cy.findByText('Indoor').should('not.exist') + cy.findByText('Outdoor').should('not.exist') + }) + }) + + describe('should hide the placeholder option when hidePlaceholderOption is true', () => { + it('on single selection', () => { + cy.mount( + + ) + + toggleOptionsMenu() + + cy.findByText('Select...').should('not.exist') + cy.findAllByRole('option').should('have.length', 3) + }) + + it('still shows the placeholder option by default', () => { + cy.mount() + + toggleOptionsMenu() + + cy.findAllByText('Select...').should('exist') + cy.findAllByRole('option').should('have.length', 4) + }) + }) + describe('should render with default values', () => { it('on single selection', () => { cy.mount( diff --git a/public/locales/en/shared.json b/public/locales/en/shared.json index 68f7c63b9..46cfa5346 100644 --- a/public/locales/en/shared.json +++ b/public/locales/en/shared.json @@ -32,6 +32,7 @@ "allowPopups": "You must enable popups in your browser to open external tools in a new window or tab.", "externalToolOpeningFailed": "There was a problem opening the external tool. Please try again.", "exportMetadata": "Export Metadata", + "exportMetadataError": "There was a problem exporting the dataset metadata. Please try again.", "pageNumberNotFound": { "heading": "Page Number Not Found", "message": "The page number you requested does not exist. Please try a different page number." @@ -299,9 +300,13 @@ "downloadRIS": "Download RIS", "downloadBibTeX": "Download BibTeX", "selectCSLStyle": "Select a CSL Style", + "commonStyles": "Common Styles", + "moreStyles": "More Styles", "citationInStyle": "Citation in {{styleName}} style", "downloadError": "An error occurred while downloading the citation", - "styledCitation": "Styled Citation" + "styledCitation": "Styled Citation", + "styleFormatError": "An error occurred while formatting the citation in the selected style. Please try a different style or try again later.", + "copyCitationToClipboard": "Copy Citation to Clipboard" }, "expandableContent": { "truncateMoreBtn": "Read full {{contentName}}", diff --git a/public/locales/es/shared.json b/public/locales/es/shared.json index 2d0eab09e..872ea332d 100644 --- a/public/locales/es/shared.json +++ b/public/locales/es/shared.json @@ -32,6 +32,7 @@ "allowPopups": "Debes habilitar las ventanas emergentes en tu navegador para abrir herramientas externas en una nueva ventana o pestaña.", "externalToolOpeningFailed": "Hubo un problema al abrir la herramienta externa. Por favor, inténtalo de nuevo.", "exportMetadata": "Exportar metadatos", + "exportMetadataError": "Hubo un problema al exportar los metadatos del dataset. Por favor, inténtalo de nuevo.", "pageNumberNotFound": { "heading": "Número de página no encontrado", "message": "El número de página solicitado no existe. Intenta con un número diferente." @@ -299,9 +300,13 @@ "downloadRIS": "Descargar RIS", "downloadBibTeX": "Descargar BibTeX", "selectCSLStyle": "Seleccionar un estilo CSL", + "commonStyles": "Estilos comunes", + "moreStyles": "Más estilos", "citationInStyle": "Cita en estilo {{styleName}}", "downloadError": "Ocurrió un error al descargar la cita", - "styledCitation": "Cita con estilo" + "styledCitation": "Cita con estilo", + "styleFormatError": "Ocurrió un error al formatear la cita en el estilo seleccionado. Intente con otro estilo o vuelva a intentarlo más tarde.", + "copyCitationToClipboard": "Copiar cita al portapapeles" }, "expandableContent": { "truncateMoreBtn": "Leer todo el {{contentName}}", diff --git a/src/dataset/domain/models/ExportedDatasetMetadata.ts b/src/dataset/domain/models/ExportedDatasetMetadata.ts new file mode 100644 index 000000000..e6d259e73 --- /dev/null +++ b/src/dataset/domain/models/ExportedDatasetMetadata.ts @@ -0,0 +1,4 @@ +export type ExportedDatasetMetadata = { + content: string + contentType: string +} diff --git a/src/dataset/domain/repositories/DatasetRepository.ts b/src/dataset/domain/repositories/DatasetRepository.ts index b156dcc1c..68bb15122 100644 --- a/src/dataset/domain/repositories/DatasetRepository.ts +++ b/src/dataset/domain/repositories/DatasetRepository.ts @@ -13,6 +13,8 @@ import { CollectionSummary } from '@/collection/domain/models/CollectionSummary' import { DatasetVersionPaginationInfo } from '../models/DatasetVersionPaginationInfo' import { DatasetUploadLimits } from '../models/DatasetUploadLimits' import { DatasetReview } from '../models/DatasetReview' +import { ExportedDatasetMetadata } from '../models/ExportedDatasetMetadata' +import { DatasetNotNumberedVersion } from '@iqss/dataverse-client-javascript' export interface DatasetRepository { getByPersistentId: ( @@ -62,6 +64,11 @@ export interface DatasetRepository { version: string, format: CitationFormat ) => Promise + exportDatasetMetadata: ( + datasetId: string | number, + exporter: string, + version?: DatasetNotNumberedVersion.LATEST_PUBLISHED | DatasetNotNumberedVersion.DRAFT + ) => Promise updateTermsOfAccess: (datasetId: string | number, termsOfAccess: TermsOfAccess) => Promise updateDatasetLicense: ( datasetId: string | number, diff --git a/src/dataset/domain/useCases/exportDatasetMetadata.ts b/src/dataset/domain/useCases/exportDatasetMetadata.ts new file mode 100644 index 000000000..e07fbff5a --- /dev/null +++ b/src/dataset/domain/useCases/exportDatasetMetadata.ts @@ -0,0 +1,12 @@ +import { ExportedDatasetMetadata } from '../models/ExportedDatasetMetadata' +import { DatasetRepository } from '../repositories/DatasetRepository' +import { DatasetNotNumberedVersion } from '@iqss/dataverse-client-javascript' + +export function exportDatasetMetadata( + datasetRepository: DatasetRepository, + datasetId: string | number, + exporter: string, + version?: DatasetNotNumberedVersion.LATEST_PUBLISHED | DatasetNotNumberedVersion.DRAFT +): Promise { + return datasetRepository.exportDatasetMetadata(datasetId, exporter, version) +} diff --git a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts index 0d489c490..5d7e834d2 100644 --- a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts +++ b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts @@ -44,8 +44,11 @@ import { getDatasetLinkedCollections, updateTermsOfAccess, updateDatasetLicense, + getDatasetStorageDriver, getDatasetUploadLimits, - getDatasetReviews + getDatasetReviews, + exportDatasetMetadata, + DatasetNotNumberedVersion } from '@iqss/dataverse-client-javascript' import { JSDatasetMapper } from '../mappers/JSDatasetMapper' import { DatasetPaginationInfo } from '../../domain/models/DatasetPaginationInfo' @@ -59,13 +62,11 @@ import { DatasetDownloadCount } from '@/dataset/domain/models/DatasetDownloadCou import { DatasetVersionPaginationInfo } from '@/dataset/domain/models/DatasetVersionPaginationInfo' import { FormattedCitation, CitationFormat } from '@/dataset/domain/models/DatasetCitation' import { DatasetLicenseUpdateRequest } from '../../domain/models/DatasetLicenseUpdateRequest' -import { axiosInstance } from '@/axiosInstance' -import { requireAppConfig } from '../../../config' -import { AxiosResponse } from 'axios' import { JSDataverseReadErrorHandler } from '@/shared/helpers/JSDataverseReadErrorHandler' import { CollectionSummary } from '@/collection/domain/models/CollectionSummary' import { DatasetUploadLimits } from '@/dataset/domain/models/DatasetUploadLimits' import { DatasetReview } from '@/dataset/domain/models/DatasetReview' +import { ExportedDatasetMetadata } from '@/dataset/domain/models/ExportedDatasetMetadata' const includeDeaccessioned = true @@ -84,10 +85,6 @@ interface IDatasetDetails { } export class DatasetJSDataverseRepository implements DatasetRepository { - static get DATAVERSE_BACKEND_URL(): string { - return requireAppConfig().backendUrl - } - getAllWithCount( collectionId: string, paginationInfo: DatasetPaginationInfo @@ -417,6 +414,15 @@ export class DatasetJSDataverseRepository implements DatasetRepository { ): Promise { return getDatasetCitationInOtherFormats.execute(datasetId, version, format) } + + exportDatasetMetadata( + datasetId: string | number, + exporter: string, + version?: DatasetNotNumberedVersion.LATEST_PUBLISHED | DatasetNotNumberedVersion.DRAFT + ): Promise { + return exportDatasetMetadata.execute(datasetId, exporter, version) + } + getAvailableCategories(datasetId: string | number): Promise { return getDatasetAvailableCategories.execute(datasetId) } @@ -433,30 +439,10 @@ export class DatasetJSDataverseRepository implements DatasetRepository { return getDatasetLinkedCollections.execute(datasetId) } - /* - TODO: This is a temporary solution as this use case doesn't exist in js-dataverse yet and the API should also return the file store type rather than name only. - After https://github.com/IQSS/dataverse/issues/11695 is implemented, create a js-dataverse use case. - */ private async getFileStore(datasetId: number): Promise { - return axiosInstance - .get( - `${DatasetJSDataverseRepository.DATAVERSE_BACKEND_URL}/api/datasets/${datasetId}/storageDriver` - ) - .then( - ( - res: AxiosResponse<{ - data: { - name: string - label: string - type: string - directDownload: boolean - directUpload: boolean - } - }> - ) => { - return res.data.data.name - } - ) + return getDatasetStorageDriver + .execute(datasetId) + .then((storageDriver) => storageDriver.name) .catch(() => { return undefined }) diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboard.module.scss b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboard.module.scss index 60570d0b8..d49bd8e29 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboard.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboard.module.scss @@ -4,7 +4,17 @@ display: inline-flex; align-items: center; margin: 0 3px; + padding: 0; + border: none; + background: none; + font: inherit; + color: inherit; cursor: pointer; + + &[aria-disabled='true'] { + cursor: default; + opacity: 0.5; + } } %icon { diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.tsx b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.tsx index 86c1e45cb..3d1d75cef 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.tsx @@ -6,14 +6,21 @@ import { useTranslation } from 'react-i18next' export function CopyToClipboardButton({ text, - showTruncateText = true + showTruncateText = true, + tooltipText, + iconSize, + disabled = false }: { text: string showTruncateText?: boolean + tooltipText?: string + iconSize?: string | number + disabled?: boolean }) { const { t } = useTranslation('files') const [copied, setCopied] = useState(false) const copyToClipboard = () => { + if (disabled) return navigator.clipboard .writeText(text) .then(() => { @@ -26,24 +33,34 @@ export function CopyToClipboardButton({ }) } + const tooltipOverlay = disabled + ? '' + : tooltipText ?? `${t('table.copyToClipboard.clickToCopy')} ${text}` + return ( - - + + ) } diff --git a/src/sections/dataset/dataset-metadata/DatasetMetadata.tsx b/src/sections/dataset/dataset-metadata/DatasetMetadata.tsx index a253804dc..0a848b713 100644 --- a/src/sections/dataset/dataset-metadata/DatasetMetadata.tsx +++ b/src/sections/dataset/dataset-metadata/DatasetMetadata.tsx @@ -1,9 +1,5 @@ import { Accordion } from '@iqss/dataverse-design-system' -import { - Dataset, - DatasetPublishingStatus, - MetadataBlockName -} from '../../../dataset/domain/models/Dataset' +import { Dataset, MetadataBlockName } from '../../../dataset/domain/models/Dataset' import { DatasetMetadataBlock } from './dataset-metadata-block/DatasetMetadataBlock' import { MetadataBlockInfoRepository } from '../../../metadata-block-info/domain/repositories/MetadataBlockInfoRepository' import { DataverseInfoRepository } from '@/info/domain/repositories/DataverseInfoRepository' @@ -27,12 +23,8 @@ export function DatasetMetadata({
diff --git a/src/sections/dataset/dataset-metadata/export-metadata-dropdown/ExportMetadataDropdown.tsx b/src/sections/dataset/dataset-metadata/export-metadata-dropdown/ExportMetadataDropdown.tsx index 0078d8fdd..eeb26d336 100644 --- a/src/sections/dataset/dataset-metadata/export-metadata-dropdown/ExportMetadataDropdown.tsx +++ b/src/sections/dataset/dataset-metadata/export-metadata-dropdown/ExportMetadataDropdown.tsx @@ -1,36 +1,70 @@ +import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { BoxArrowUpRight } from 'react-bootstrap-icons' import { DropdownButton, DropdownButtonItem } from '@iqss/dataverse-design-system' import { useGetAvailableDatasetMetadataExportFormats } from '@/info/domain/hooks/useGetAvailableDatasetMetadataExportFormats' import { DataverseInfoRepository } from '@/info/domain/repositories/DataverseInfoRepository' -import { QueryParamKey } from '@/sections/Route.enum' -import { requireAppConfig } from '@/config' +import { + DatasetNonNumericVersion, + DatasetNonNumericVersionSearchParam, + DatasetPublishingStatus, + DatasetVersion +} from '@/dataset/domain/models/Dataset' +import { useDatasetRepositories } from '@/shared/contexts/repositories/RepositoriesProvider' +import { useExportMetadata } from '@/sections/dataset/dataset-metadata/export-metadata-dropdown/useExportMetadata' +import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository' +import { getDatasetVersionsSummaries } from '@/dataset/domain/useCases/getDatasetVersionsSummaries' +import { DatasetVersionPaginationInfo } from '@/dataset/domain/models/DatasetVersionPaginationInfo' +import { + DatasetVersionSummaryInfo, + DatasetVersionSummaryStringValues +} from '@/dataset/domain/models/DatasetVersionSummaryInfo' interface ExportMetadataDropdownProps { datasetPersistentId: string - datasetIsReleased: boolean - datasetIsDeaccessioned: boolean - canUpdateDataset: boolean + datasetVersion: DatasetVersion anonymizedView: boolean dataverseInfoRepository: DataverseInfoRepository } export const ExportMetadataDropdown = ({ datasetPersistentId, - datasetIsReleased, - datasetIsDeaccessioned, - canUpdateDataset, + datasetVersion, anonymizedView, dataverseInfoRepository }: ExportMetadataDropdownProps) => { - const appConfig = requireAppConfig() - + const { datasetRepository } = useDatasetRepositories() const { t } = useTranslation('shared') + const [shouldRender, setShouldRender] = useState(false) const { datasetMetadataExportFormats, isLoadingExportFormats, errorGetExportFormats } = useGetAvailableDatasetMetadataExportFormats({ dataverseInfoRepository }) + const { handleExportMetadata } = useExportMetadata({ + datasetPersistentId, + datasetVersion + }) + + useEffect(() => { + let isMounted = true + setShouldRender(false) + + if (anonymizedView) { + return () => { + isMounted = false + } + } - const shouldRender = - datasetIsReleased && (!datasetIsDeaccessioned || canUpdateDataset) && !anonymizedView + void canExportMetadata(datasetRepository, datasetPersistentId, datasetVersion).then( + (canExportMetadataResult) => { + if (isMounted) { + setShouldRender(canExportMetadataResult) + } + } + ) + + return () => { + isMounted = false + } + }, [datasetRepository, datasetPersistentId, datasetVersion, anonymizedView]) if (!shouldRender) return null @@ -52,12 +86,12 @@ export const ExportMetadataDropdown = ({ {Object.entries(datasetMetadataExportFormats).map(([key, exportFormat]) => { if (!exportFormat.isVisibleInUserInterface) return null - const href = `${appConfig.backendUrl}/api/datasets/export?exporter=${key}&${ - QueryParamKey.PERSISTENT_ID - }=${encodeURIComponent(datasetPersistentId)}` - return ( - + handleExportMetadata(key)} + key={key}> {exportFormat.displayName} ) @@ -65,3 +99,60 @@ export const ExportMetadataDropdown = ({ ) } + +async function canExportMetadata( + datasetRepository: DatasetRepository, + datasetId: number | string, + datasetVersion: DatasetVersion +): Promise { + // Anyone who can load a draft dataset page already has the backend's implicit permission to + // view it (unauthorized users get a 404 before this component ever renders), so exporting its + // metadata should be available to everyone who can see the draft, not just editors. + if (datasetVersion.publishingStatus === DatasetPublishingStatus.DRAFT) { + return true + } + + if (datasetVersion.publishingStatus !== DatasetPublishingStatus.RELEASED) { + return false + } + + return isLatestPublishedVersion(datasetRepository, datasetId, datasetVersion.number.toString()) +} + +async function isLatestPublishedVersion( + datasetRepository: DatasetRepository, + datasetId: number | string, + datasetVersionNumber: string +): Promise { + try { + const versionSummaries = await getDatasetVersionsSummaries( + datasetRepository, + datasetId, + new DatasetVersionPaginationInfo(1, 10) + ) + const latestPublishedVersion = versionSummaries.summaries.find((summary) => + isPublishedVersionSummary(summary) + ) + + return latestPublishedVersion?.versionNumber === datasetVersionNumber + } catch { + return false + } +} + +function isPublishedVersionSummary(summary: DatasetVersionSummaryInfo): boolean { + return ( + summary.versionNumber !== DatasetNonNumericVersion.DRAFT && + summary.versionNumber !== DatasetNonNumericVersionSearchParam.DRAFT && + !isDeaccessionedVersionSummary(summary) + ) +} + +function isDeaccessionedVersionSummary(summary: DatasetVersionSummaryInfo): boolean { + return ( + summary.summary === DatasetVersionSummaryStringValues.versionDeaccessioned || + (typeof summary.summary === 'object' && + summary.summary !== null && + 'deaccessioned' in summary.summary) + ) +} diff --git a/src/sections/dataset/dataset-metadata/export-metadata-dropdown/useExportMetadata.ts b/src/sections/dataset/dataset-metadata/export-metadata-dropdown/useExportMetadata.ts new file mode 100644 index 000000000..c83a85d97 --- /dev/null +++ b/src/sections/dataset/dataset-metadata/export-metadata-dropdown/useExportMetadata.ts @@ -0,0 +1,61 @@ +import { useCallback } from 'react' +import { useTranslation } from 'react-i18next' +import { toast } from 'react-toastify' +import { DatasetNotNumberedVersion } from '@iqss/dataverse-client-javascript' +import { DatasetPublishingStatus, DatasetVersion } from '@/dataset/domain/models/Dataset' +import { exportDatasetMetadata } from '@/dataset/domain/useCases/exportDatasetMetadata' +import { useDatasetRepositories } from '@/shared/contexts/repositories/RepositoriesProvider' + +interface UseExportMetadataParams { + datasetPersistentId: string + datasetVersion: DatasetVersion +} + +interface UseExportMetadataReturn { + handleExportMetadata: (exporter: string) => Promise +} + +export const useExportMetadata = ({ + datasetPersistentId, + datasetVersion +}: UseExportMetadataParams): UseExportMetadataReturn => { + const { datasetRepository } = useDatasetRepositories() + const { t } = useTranslation('shared') + + const handleExportMetadata = useCallback( + async (exporter: string) => { + const newWindow = window.open('', '_blank') + + if (!newWindow || newWindow.closed || typeof newWindow.closed === 'undefined') { + return + } + + try { + newWindow.document.title = t('exportMetadata') + + const version = + datasetVersion.publishingStatus === DatasetPublishingStatus.DRAFT + ? DatasetNotNumberedVersion.DRAFT + : undefined + const metadata = await exportDatasetMetadata( + datasetRepository, + datasetPersistentId, + exporter, + version + ) + + const blob = new Blob([metadata.content], { type: metadata.contentType }) + const url = URL.createObjectURL(blob) + newWindow.location.href = url + + setTimeout(() => URL.revokeObjectURL(url), 1000) + } catch { + if (!newWindow.closed) newWindow.close() + toast.error(t('exportMetadataError')) + } + }, + [datasetRepository, datasetPersistentId, datasetVersion.publishingStatus, t] + ) + + return { handleExportMetadata } +} diff --git a/src/sections/file/file-metadata/FileMetadata.tsx b/src/sections/file/file-metadata/FileMetadata.tsx index e15a41e55..db02616e3 100644 --- a/src/sections/file/file-metadata/FileMetadata.tsx +++ b/src/sections/file/file-metadata/FileMetadata.tsx @@ -12,7 +12,6 @@ import { DataverseInfoRepository } from '@/info/domain/repositories/DataverseInf import { ExportMetadataDropdown } from '@/sections/dataset/dataset-metadata/export-metadata-dropdown/ExportMetadataDropdown' import { File } from '@/files/domain/models/File' import styles from './FileMetadata.module.scss' -import { DatasetPublishingStatus } from '@/dataset/domain/models/Dataset' interface FileMetadataProps { name: string @@ -41,18 +40,16 @@ export function FileMetadata({ return ( <> -
- -
+ {datasetVersion.isLatest && ( +
+ +
+ )} {t('metadata.title')} diff --git a/src/sections/shared/citation/Citation.module.scss b/src/sections/shared/citation/Citation.module.scss index 9beca2860..1fae3e00f 100644 --- a/src/sections/shared/citation/Citation.module.scss +++ b/src/sections/shared/citation/Citation.module.scss @@ -13,16 +13,27 @@ color: $dv-info-border-color; } +.citationStyleLabel { + margin-top: 15px; +} + .styledCitationBox { - padding: 0.5rem 1rem; overflow-x: auto; white-space: nowrap; scrollbar-width: none; - background-color: #f7f7f9; - border: solid 1px $dv-border-color; - border-radius: 4px; + + :global(.csl-left-margin) { + display: none; + } } .styledCitationButton { color: $dv-link-color !important; } + +.copyCitationButtonWrapper { + display: flex; + align-items: center; + margin-right: -12px; + margin-bottom: -2px; +} diff --git a/src/sections/shared/citation/citation-download/CitationDownloadButton.tsx b/src/sections/shared/citation/citation-download/CitationDownloadButton.tsx index 7cc5e902d..cde25e764 100644 --- a/src/sections/shared/citation/citation-download/CitationDownloadButton.tsx +++ b/src/sections/shared/citation/citation-download/CitationDownloadButton.tsx @@ -1,5 +1,5 @@ import { useTranslation } from 'react-i18next' -import { DropdownButton, DropdownButtonItem } from '@iqss/dataverse-design-system' +import { DropdownButton, DropdownButtonItem, Stack } from '@iqss/dataverse-design-system' import { ViewStyledCitationModal } from './ViewStyledCitationModal' import { useState } from 'react' import { CitationFormat } from '@/dataset/domain/models/DatasetCitation' @@ -7,6 +7,9 @@ import { useDownloadCitation } from './useDownloadCitation' import { FormattedCitation } from '@iqss/dataverse-client-javascript/dist/datasets/domain/models/FormattedCitation' import { toast } from 'react-toastify' import { useDatasetRepositories } from '@/shared/contexts/repositories/RepositoriesProvider' +import { CopyToClipboardButton } from '@/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton' +import { useDefaultStyleCitation } from './csl/useDefaultStyleCitation' +import { DEFAULT_CSL_STYLE_SLUG } from './csl/cslStyleOptions' import styles from '../Citation.module.scss' interface CitationDownloadProps { @@ -19,6 +22,7 @@ export function CitationDownloadButton({ datasetId, version }: CitationDownloadP const { t } = useTranslation('shared', { keyPrefix: 'downloadCitation' }) const [isModalOpen, setIsModalOpen] = useState(false) const [styledCitation, setStyledCitation] = useState(null) + const [styledCitationFetchFailed, setStyledCitationFetchFailed] = useState(false) const { error, handleGetCitation, handleDownloadCitation } = useDownloadCitation({ datasetRepository, @@ -26,6 +30,13 @@ export function CitationDownloadButton({ datasetId, version }: CitationDownloadP version }) + const { + cslJsonCitation, + defaultStyleCitationHtml, + defaultStyleCitationText, + isFetching: isFetchingDefaultStyleCitation + } = useDefaultStyleCitation({ datasetRepository, datasetId, version }) + if (error) { toast.error(t('downloadError')) } @@ -33,35 +44,54 @@ export function CitationDownloadButton({ datasetId, version }: CitationDownloadP const handleCloseModal = () => setIsModalOpen(false) const handleOpenModal = async () => { setIsModalOpen(true) - const result = await handleGetCitation(CitationFormat.Internal) + setStyledCitationFetchFailed(false) + const result = cslJsonCitation ?? (await handleGetCitation(CitationFormat.CSLJson)) setStyledCitation(result) + setStyledCitationFetchFailed(result === null) } + return ( <> - - handleDownloadCitation(CitationFormat.EndNote, `${datasetId}.xml`)}> - {t('downloadEndNoteXML')} - - handleDownloadCitation(CitationFormat.RIS, `${datasetId}.ris`)}> - {t('downloadRIS')} - - handleDownloadCitation(CitationFormat.BibTeX, `${datasetId}.bib`)}> - {t('downloadBibTeX')} - - - {t('viewStyledCitation')} - - + +
+ +
+ + handleDownloadCitation(CitationFormat.EndNote, `${datasetId}.xml`)}> + {t('downloadEndNoteXML')} + + handleDownloadCitation(CitationFormat.RIS, `${datasetId}.ris`)}> + {t('downloadRIS')} + + handleDownloadCitation(CitationFormat.BibTeX, `${datasetId}.bib`)}> + {t('downloadBibTeX')} + + + {t('viewStyledCitation')} + + +
) diff --git a/src/sections/shared/citation/citation-download/ViewStyledCitationModal.tsx b/src/sections/shared/citation/citation-download/ViewStyledCitationModal.tsx index 43d1338cd..036f3eaa0 100644 --- a/src/sections/shared/citation/citation-download/ViewStyledCitationModal.tsx +++ b/src/sections/shared/citation/citation-download/ViewStyledCitationModal.tsx @@ -1,45 +1,91 @@ +import { useMemo, useState } from 'react' +import cn from 'classnames' import { FormattedCitation } from '@/dataset/domain/models/DatasetCitation' import { CopyToClipboardButton } from '@/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton' -import { Button, Form, Modal, Stack } from '@iqss/dataverse-design-system' +import { Alert, Button, Form, Modal, Spinner, Stack } from '@iqss/dataverse-design-system' import { useTranslation } from 'react-i18next' +import { Utils } from '@/shared/helpers/Utils' import styles from '../Citation.module.scss' +import { buildCslStyleOptions, DEFAULT_CSL_STYLE_SLUG } from './csl/cslStyleOptions' +import { useStyledCitation, StyledCitationSeed } from './csl/useStyledCitation' +import { CslJsonItem } from './csl/citeprocEngine' interface ViewStyledCitationModalProps { show: boolean handleClose: () => void citation: FormattedCitation | null + citationFetchFailed?: boolean + defaultStyleCitationSeed?: StyledCitationSeed | null } export const ViewStyledCitationModal = ({ show, handleClose, - citation + citation, + citationFetchFailed = false, + defaultStyleCitationSeed }: ViewStyledCitationModalProps) => { const { t } = useTranslation('shared', { keyPrefix: 'downloadCitation' }) const { t: tShared } = useTranslation('shared') const modalTitle = t('styledCitation') - //TODO: Implement more CSL Style and its corresponding parsing logic + const [selectedStyleSlug, setSelectedStyleSlug] = useState(DEFAULT_CSL_STYLE_SLUG) + + const cslStyleOptions = useMemo( + () => buildCslStyleOptions(t('commonStyles'), t('moreStyles')), + [t] + ) + const cslJsonItem = useMemo(() => parseCslJsonItem(citation), [citation]) + const { + citationHtml, + isLoading: isFormattingCitation, + error: formatError + } = useStyledCitation(cslJsonItem, selectedStyleSlug, defaultStyleCitationSeed) + const isLoading = !citationFetchFailed && isFormattingCitation + const error = citationFetchFailed || formatError + const plainTextCitation = citationHtml ? Utils.htmlToPlainText(citationHtml) : '' - const parsedCitationContent = parse(citation?.content || '') return ( {modalTitle} + {error && ( + + {t('styleFormatError')} + + )}
{t('selectCSLStyle')} - - - {/* Add more CSL styles as needed */} - - - {t('citationInStyle', { styleName: 'Chicago-Author-Date' })} - - -

{parsedCitationContent}

- -
+ + {!error && ( + <> + + {t('citationInStyle', { styleName: selectedStyleSlug })} + + +

+ {isLoading && } + {!isLoading && } +

+ +
+ + )}
@@ -51,6 +97,13 @@ export const ViewStyledCitationModal = ({ ) } -export function parse(citation: string): string { - return citation.replace(/<[^>]+>/g, '') +function parseCslJsonItem(citation: FormattedCitation | null): CslJsonItem | null { + if (!citation) { + return null + } + try { + return JSON.parse(citation.content) as CslJsonItem + } catch { + return null + } } diff --git a/src/sections/shared/citation/citation-download/csl/citeproc.d.ts b/src/sections/shared/citation/citation-download/csl/citeproc.d.ts new file mode 100644 index 000000000..4c5e88bb2 --- /dev/null +++ b/src/sections/shared/citation/citation-download/csl/citeproc.d.ts @@ -0,0 +1,19 @@ +declare module 'citeproc' { + export interface CiteprocSys { + retrieveLocale: (lang: string) => string + retrieveItem: (id: string | number) => Record + } + + export class Engine { + constructor(sys: CiteprocSys, style: string, lang?: string, forceLang?: boolean) + updateItems(ids: (string | number)[]): void + makeBibliography(): [Record, string[]] | false + } + + interface CslNamespace { + Engine: typeof Engine + } + + const CSL: CslNamespace + export default CSL +} diff --git a/src/sections/shared/citation/citation-download/csl/citeprocEngine.ts b/src/sections/shared/citation/citation-download/csl/citeprocEngine.ts new file mode 100644 index 000000000..1e9930aaa --- /dev/null +++ b/src/sections/shared/citation/citation-download/csl/citeprocEngine.ts @@ -0,0 +1,34 @@ +import CSL from 'citeproc' +import DOMPurify from 'dompurify' +import { getResolvedStyleXml, getLocaleXml, DEFAULT_CSL_LOCALE } from './cslStyleFetcher' + +export type CslJsonItem = Record & { id?: string | number } + +const FALLBACK_ITEM_ID = 'dataverse-citation-item' + +export async function formatCitationAsHtml( + cslJsonItem: CslJsonItem, + styleSlug: string, + locale: string = DEFAULT_CSL_LOCALE +): Promise { + const [styleXml, localeXml] = await Promise.all([ + getResolvedStyleXml(styleSlug), + getLocaleXml(locale) + ]) + + const itemId = String(cslJsonItem.id ?? FALLBACK_ITEM_ID) + const item: CslJsonItem = { ...cslJsonItem, id: itemId } + + const engine = new CSL.Engine( + { + retrieveLocale: () => localeXml, + retrieveItem: () => item + }, + styleXml + ) + engine.updateItems([itemId]) + const bibliography = engine.makeBibliography() + const html = bibliography ? bibliography[1][0] ?? '' : '' + + return DOMPurify.sanitize(html, { USE_PROFILES: { html: true } }) +} diff --git a/src/sections/shared/citation/citation-download/csl/cslStyleFetcher.ts b/src/sections/shared/citation/citation-download/csl/cslStyleFetcher.ts new file mode 100644 index 000000000..d8c14414b --- /dev/null +++ b/src/sections/shared/citation/citation-download/csl/cslStyleFetcher.ts @@ -0,0 +1,84 @@ +// @master is a mutable branch: Output can change or break without an application release, and a compromised upstream becomes runtime input. +export const CSL_STYLES_BASE_URL = + 'https://cdn.jsdelivr.net/gh/citation-style-language/styles@master' +export const CSL_LOCALES_BASE_URL = + 'https://cdn.jsdelivr.net/gh/citation-style-language/locales@master' +export const DEFAULT_CSL_LOCALE = 'en-US' + +const styleXmlCache = new Map() +const localeXmlCache = new Map() + +export function clearCslCachesForTests(): void { + styleXmlCache.clear() + localeXmlCache.clear() +} + +export class CslStyleResolutionError extends Error { + constructor(styleSlug: string) { + super(`Unable to resolve CSL style "${styleSlug}": no independent-parent link found.`) + } +} + +export async function getResolvedStyleXml(styleSlug: string): Promise { + const cached = styleXmlCache.get(styleSlug) + if (cached !== undefined) { + return cached + } + const xml = await resolveStyleXml(styleSlug) + styleXmlCache.set(styleSlug, xml) + return xml +} + +export async function getLocaleXml(lang: string = DEFAULT_CSL_LOCALE): Promise { + const cached = localeXmlCache.get(lang) + if (cached !== undefined) { + return cached + } + const xml = await fetchTextOrThrow(`${CSL_LOCALES_BASE_URL}/locales-${lang}.xml`) + localeXmlCache.set(lang, xml) + return xml +} + +async function resolveStyleXml(styleSlug: string): Promise { + const independentXml = await fetchTextOr404(`${CSL_STYLES_BASE_URL}/${styleSlug}.csl`) + if (independentXml !== null) { + return independentXml + } + + const dependentXml = await fetchTextOrThrow(`${CSL_STYLES_BASE_URL}/dependent/${styleSlug}.csl`) + const parentSlug = extractIndependentParentSlug(dependentXml) + if (!parentSlug) { + throw new CslStyleResolutionError(styleSlug) + } + + return getResolvedStyleXml(parentSlug) +} + +function extractIndependentParentSlug(xml: string): string | null { + const doc = new DOMParser().parseFromString(xml, 'application/xml') + const href = doc.querySelector('link[rel="independent-parent"]')?.getAttribute('href') + if (!href) { + return null + } + const segments = href.split('/').filter(Boolean) + return segments[segments.length - 1] ?? null +} + +async function fetchTextOr404(url: string): Promise { + const response = await fetch(url) + if (response.status === 404) { + return null + } + if (!response.ok) { + throw new Error(`Failed to fetch ${url}: ${response.status}`) + } + return response.text() +} + +async function fetchTextOrThrow(url: string): Promise { + const response = await fetch(url) + if (!response.ok) { + throw new Error(`Failed to fetch ${url}: ${response.status}`) + } + return response.text() +} diff --git a/src/sections/shared/citation/citation-download/csl/cslStyleOptions.ts b/src/sections/shared/citation/citation-download/csl/cslStyleOptions.ts new file mode 100644 index 000000000..a3b672137 --- /dev/null +++ b/src/sections/shared/citation/citation-download/csl/cslStyleOptions.ts @@ -0,0 +1,34 @@ +import cslStylesRaw from './cslStyles.json' + +export interface CslStyleOption { + value: string + label: string + group?: string +} + +export const DEFAULT_CSL_STYLE_SLUG = 'chicago-author-date' + +const COMMON_CSL_STYLE_SLUGS = ['chicago-author-date', 'ieee'] + +export function buildCslStyleOptions( + commonStylesGroupLabel: string, + moreStylesGroupLabel: string +): CslStyleOption[] { + const commonSlugs = new Set(COMMON_CSL_STYLE_SLUGS) + + const commonOptions: CslStyleOption[] = COMMON_CSL_STYLE_SLUGS.map((slug) => ({ + value: slug, + label: slug, + group: commonStylesGroupLabel + })) + + const moreOptions: CslStyleOption[] = cslStylesRaw + .filter((style) => !commonSlugs.has(style.slug)) + .map((style) => ({ + value: style.slug, + label: style.slug, + group: moreStylesGroupLabel + })) + + return [...commonOptions, ...moreOptions] +} diff --git a/src/sections/shared/citation/citation-download/csl/cslStyles.json b/src/sections/shared/citation/citation-download/csl/cslStyles.json new file mode 100644 index 000000000..4fcd57eaa --- /dev/null +++ b/src/sections/shared/citation/citation-download/csl/cslStyles.json @@ -0,0 +1,10382 @@ +[ + { + "slug": "academy-of-management-review", + "label": "Academy of Management Review" + }, + { + "slug": "accident-analysis-and-prevention", + "label": "Accident Analysis and Prevention" + }, + { + "slug": "aci-materials-journal", + "label": "ACI Materials Journal" + }, + { + "slug": "acm-sig-proceedings-long-author-list", + "label": "ACM SIG Proceedings (\"et al.\" for 15+ authors)" + }, + { + "slug": "acm-sig-proceedings", + "label": "ACM SIG Proceedings (\"et al.\" for 3+ authors)" + }, + { + "slug": "acm-sigchi-proceedings-extended-abstract-format", + "label": "ACM SIGCHI Proceedings - Extended Abstract Format" + }, + { + "slug": "acm-sigchi-proceedings", + "label": "ACM SIGCHI Proceedings (2016)" + }, + { + "slug": "acm-siggraph", + "label": "ACM SIGGRAPH" + }, + { + "slug": "acme-an-international-journal-for-critical-geographies", + "label": "ACME: An International Journal for Critical Geographies" + }, + { + "slug": "acta-amazonica", + "label": "Acta Amazonica" + }, + { + "slug": "acta-anaesthesiologica-scandinavica", + "label": "Acta Anaesthesiologica Scandinavica" + }, + { + "slug": "acta-anaesthesiologica-taiwanica", + "label": "Acta Anaesthesiologica Taiwanica" + }, + { + "slug": "acta-botanica-croatica", + "label": "Acta Botanica Croatica" + }, + { + "slug": "acta-chiropterologica", + "label": "Acta Chiropterologica" + }, + { + "slug": "acta-chirurgiae-orthopaedicae-et-traumatologiae-cechoslovaca", + "label": "Acta chirurgiae orthopaedicae et traumatologiae Čechoslovaca" + }, + { + "slug": "acta-hydrotechnica", + "label": "Acta hydrotechnica" + }, + { + "slug": "acta-ichthyologica-et-piscatoria", + "label": "Acta Ichthyologica et Piscatoria" + }, + { + "slug": "acta-medica-peruana", + "label": "Acta Médica Peruana" + }, + { + "slug": "acta-naturae", + "label": "Acta Naturae" + }, + { + "slug": "acta-neurobiologiae-experimentalis", + "label": "Acta Neurobiologiae Experimentalis" + }, + { + "slug": "acta-neurochirurgica", + "label": "Acta Neurochirurgica" + }, + { + "slug": "acta-ophthalmologica", + "label": "Acta Ophthalmologica" + }, + { + "slug": "acta-ornithologica", + "label": "Acta Ornithologica" + }, + { + "slug": "acta-orthopaedica-belgica", + "label": "Acta Orthopædica Belgica" + }, + { + "slug": "acta-orthopaedica", + "label": "Acta Orthopaedica" + }, + { + "slug": "acta-paediatrica", + "label": "Acta Paediatrica" + }, + { + "slug": "acta-palaeontologica-polonica", + "label": "Acta Palaeontologica Polonica" + }, + { + "slug": "acta-pharmaceutica-sinica-b", + "label": "Acta Pharmaceutica Sinica B" + }, + { + "slug": "acta-pharmaceutica", + "label": "Acta Pharmaceutica" + }, + { + "slug": "acta-philosophica", + "label": "Acta Philosophica" + }, + { + "slug": "acta-physica-sinica", + "label": "Acta Physica Sinica (物理学报)" + }, + { + "slug": "acta-physiologica", + "label": "Acta Physiologica" + }, + { + "slug": "acta-polytechnica", + "label": "Acta Polytechnica" + }, + { + "slug": "acta-radiologica", + "label": "Acta Radiologica" + }, + { + "slug": "acta-scientiae-veterinariae", + "label": "Acta Scientiae Veterinariae" + }, + { + "slug": "acta-societatis-botanicorum-poloniae", + "label": "Acta Societatis Botanicorum Poloniae" + }, + { + "slug": "acta-universitatis-agriculturae-et-silviculturae-mendelianae-brunensis", + "label": "Acta Universitatis Agriculturae et Silviculturae Mendelianae Brunensis" + }, + { + "slug": "acta-universitatis-agriculturae-sueciae", + "label": "Acta Universitatis Agriculturae Sueciae (Swedish University of Agricultural Sciences)" + }, + { + "slug": "acta-zoologica-academiae-scientiarum-hungaricae", + "label": "Acta Zoologica Academiae Scientiarum Hungaricae" + }, + { + "slug": "administrative-science-quarterly", + "label": "Administrative Science Quarterly" + }, + { + "slug": "advanced-engineering-materials", + "label": "Advanced Engineering Materials" + }, + { + "slug": "advanced-functional-materials", + "label": "Advanced Functional Materials" + }, + { + "slug": "advanced-healthcare-materials", + "label": "Advanced Healthcare Materials" + }, + { + "slug": "advanced-materials", + "label": "Advanced Materials" + }, + { + "slug": "advanced-optical-materials", + "label": "Advanced Optical Materials" + }, + { + "slug": "advanced-pharmaceutical-bulletin", + "label": "Advanced Pharmaceutical Bulletin" + }, + { + "slug": "advances-in-alzheimers-disease", + "label": "Advances in Alzheimer's Disease" + }, + { + "slug": "advances-in-complex-systems", + "label": "Advances in Complex Systems" + }, + { + "slug": "aerosol-and-air-quality-research", + "label": "Aerosol and Air Quality Research" + }, + { + "slug": "aerosol-science-and-technology", + "label": "Aerosol Science and Technology" + }, + { + "slug": "aerospace-medicine-and-human-performance", + "label": "Aerospace Medicine and Human Performance" + }, + { + "slug": "african-journal-of-marine-science", + "label": "African Journal of Marine Science" + }, + { + "slug": "african-online-scientific-information-systems-harvard", + "label": "African Online Scientific Information Systems - Harvard" + }, + { + "slug": "african-online-scientific-information-systems-vancouver", + "label": "African Online Scientific Information Systems - Vancouver" + }, + { + "slug": "african-zoology", + "label": "African Zoology" + }, + { + "slug": "afro-asia", + "label": "Afro-Ásia (Português - Brasil)" + }, + { + "slug": "age-and-ageing", + "label": "Age and Ageing" + }, + { + "slug": "ageing-and-society", + "label": "Ageing & Society" + }, + { + "slug": "aging-and-disease", + "label": "Aging and Disease" + }, + { + "slug": "aging-cell", + "label": "Aging Cell" + }, + { + "slug": "aging", + "label": "Aging" + }, + { + "slug": "agora", + "label": "Agora" + }, + { + "slug": "agriculturae-conspectus-scientificus", + "label": "Agriculturae Conspectus Scientificus" + }, + { + "slug": "aib-studi", + "label": "AIB studi (Italiano)" + }, + { + "slug": "aids", + "label": "AIDS" + }, + { + "slug": "aims-press", + "label": "AIMS Press" + }, + { + "slug": "aix-marseille-universite-departement-d-etudes-asiatiques", + "label": "Aix-Marseille Université - Département d'études asiatiques (Français)" + }, + { + "slug": "al-jamiah-journal-of-islamic-studies", + "label": "Al-Jami'ah - Journal of Islamic Studies" + }, + { + "slug": "alcohol-and-alcoholism", + "label": "Alcohol and Alcoholism" + }, + { + "slug": "alcoholism-clinical-and-experimental-research", + "label": "Alcoholism: Clinical and Experimental Research" + }, + { + "slug": "alkoholizmus-a-drogove-zavislosti", + "label": "Alkoholizmus a drogové závislosti" + }, + { + "slug": "allergology-international", + "label": "Allergology International" + }, + { + "slug": "allergy", + "label": "Allergy" + }, + { + "slug": "alternatif-politika", + "label": "Alternatif Politika" + }, + { + "slug": "alternatives-to-animal-experimentation", + "label": "Alternatives to Animal Experimentation" + }, + { + "slug": "ambio", + "label": "AMBIO" + }, + { + "slug": "ameghiniana", + "label": "Ameghiniana" + }, + { + "slug": "american-anthropological-association", + "label": "American Anthropological Association" + }, + { + "slug": "american-association-for-cancer-research", + "label": "American Association for Cancer Research" + }, + { + "slug": "american-association-of-petroleum-geologists", + "label": "American Association of Petroleum Geologists" + }, + { + "slug": "american-chemical-society", + "label": "American Chemical Society" + }, + { + "slug": "american-fisheries-society", + "label": "American Fisheries Society" + }, + { + "slug": "american-geophysical-union", + "label": "American Geophysical Union" + }, + { + "slug": "american-heart-association", + "label": "American Heart Association" + }, + { + "slug": "american-institute-of-aeronautics-and-astronautics", + "label": "American Institute of Aeronautics and Astronautics" + }, + { + "slug": "american-institute-of-physics", + "label": "American Institute of Physics 4th edition" + }, + { + "slug": "american-journal-of-agricultural-economics", + "label": "American Journal of Agricultural Economics" + }, + { + "slug": "american-journal-of-archaeology", + "label": "American Journal of Archaeology" + }, + { + "slug": "american-journal-of-botany", + "label": "American Journal of Botany" + }, + { + "slug": "american-journal-of-climate-change", + "label": "American Journal of Climate Change" + }, + { + "slug": "american-journal-of-clinical-pathology", + "label": "American Journal of Clinical Pathology" + }, + { + "slug": "american-journal-of-enology-and-viticulture", + "label": "American Journal of Enology and Viticulture" + }, + { + "slug": "american-journal-of-epidemiology", + "label": "American Journal of Epidemiology" + }, + { + "slug": "american-journal-of-health-behavior", + "label": "American Journal of Health Behavior" + }, + { + "slug": "american-journal-of-hypertension", + "label": "American Journal of Hypertension" + }, + { + "slug": "american-journal-of-medical-genetics", + "label": "American Journal of Medical Genetics" + }, + { + "slug": "american-journal-of-neuroradiology", + "label": "American Journal of Neuroradiology" + }, + { + "slug": "american-journal-of-orthodontics-and-dentofacial-orthopedics", + "label": "American Journal of Orthodontics & Dentofacial Orthopedics" + }, + { + "slug": "american-journal-of-plant-sciences", + "label": "American Journal of Plant Sciences" + }, + { + "slug": "american-journal-of-political-science", + "label": "American Journal of Political Science" + }, + { + "slug": "american-journal-of-respiratory-and-critical-care-medicine", + "label": "American Journal of Respiratory and Critical Care Medicine" + }, + { + "slug": "american-journal-of-science", + "label": "American Journal of Science" + }, + { + "slug": "american-journal-of-sociology", + "label": "American Journal of Sociology" + }, + { + "slug": "american-journal-of-sonography", + "label": "American Journal of Sonography" + }, + { + "slug": "american-journal-of-surgical-pathology", + "label": "American Journal of Surgical Pathology" + }, + { + "slug": "american-journal-of-translational-research", + "label": "American Journal of Translational Research" + }, + { + "slug": "american-marketing-association", + "label": "American Marketing Association" + }, + { + "slug": "american-medical-association-10th-edition", + "label": "American Medical Association 10th edition" + }, + { + "slug": "american-medical-association-alphabetical", + "label": "American Medical Association 11th edition (sorted alphabetically)" + }, + { + "slug": "american-medical-association-brackets", + "label": "American Medical Association 11th edition (brackets)" + }, + { + "slug": "american-medical-association-no-et-al", + "label": "American Medical Association 11th edition (no \"et al.\")" + }, + { + "slug": "american-medical-association-no-url-alphabetical", + "label": "American Medical Association 11th edition (no URL, sorted alphabetically)" + }, + { + "slug": "american-medical-association-no-url", + "label": "American Medical Association 11th edition (no URL)" + }, + { + "slug": "american-medical-association-parentheses", + "label": "American Medical Association 11th edition (parentheses)" + }, + { + "slug": "american-medical-association", + "label": "American Medical Association 11th edition" + }, + { + "slug": "american-meteorological-society", + "label": "American Meteorological Society" + }, + { + "slug": "american-mineralogist", + "label": "American Mineralogist" + }, + { + "slug": "american-nuclear-society", + "label": "American Nuclear Society" + }, + { + "slug": "american-physical-society-et-al", + "label": "American Physical Society - et al. (if more than 3 authors)" + }, + { + "slug": "american-physics-society-without-titles", + "label": "American Physical Society (without titles)" + }, + { + "slug": "american-physics-society", + "label": "American Physical Society" + }, + { + "slug": "american-physiological-society", + "label": "American Physiological Society" + }, + { + "slug": "american-phytopathological-society", + "label": "American Phytopathological Society" + }, + { + "slug": "american-political-science-association", + "label": "American Political Science Association" + }, + { + "slug": "american-school-of-classical-studies-at-athens", + "label": "American School of Classical Studies at Athens" + }, + { + "slug": "american-society-for-horticultural-science", + "label": "American Society for Horticultural Science" + }, + { + "slug": "american-society-for-microbiology", + "label": "American Society for Microbiology" + }, + { + "slug": "american-society-for-pharmacology-and-experimental-therapeutics", + "label": "American Society for Pharmacology and Experimental Therapeutics" + }, + { + "slug": "american-society-of-agricultural-and-biological-engineers", + "label": "American Society of Agricultural and Biological Engineers" + }, + { + "slug": "american-society-of-civil-engineers", + "label": "American Society of Civil Engineers" + }, + { + "slug": "american-society-of-mechanical-engineers", + "label": "American Society of Mechanical Engineers" + }, + { + "slug": "american-sociological-association", + "label": "American Sociological Association 6th/7th edition" + }, + { + "slug": "american-statistical-association", + "label": "American Statistical Association" + }, + { + "slug": "american-veterinary-medical-association", + "label": "American Veterinary Medical Association" + }, + { + "slug": "amerindia", + "label": "Amerindia" + }, + { + "slug": "amphibia-reptilia", + "label": "Amphibia-Reptilia" + }, + { + "slug": "amsterdam-university-press-academic", + "label": "Amsterdam University Press - Academic" + }, + { + "slug": "anabases", + "label": "Anabases" + }, + { + "slug": "anaesthesia", + "label": "Anaesthesia" + }, + { + "slug": "anais-da-academia-brasileira-de-ciencias", + "label": "Anais da Academia Brasileira de Ciências" + }, + { + "slug": "analytical-sciences", + "label": "Analytical Sciences" + }, + { + "slug": "anatomical-sciences-education", + "label": "Anatomical Sciences Education" + }, + { + "slug": "ancilla-iuris", + "label": "Ancilla Iuris" + }, + { + "slug": "andean-geology", + "label": "Andean Geology" + }, + { + "slug": "anesthesia-and-analgesia", + "label": "Anesthesia and Analgesia" + }, + { + "slug": "anesthesiology", + "label": "Anesthesiology" + }, + { + "slug": "angewandte-chemie", + "label": "Angewandte Chemie International Edition" + }, + { + "slug": "angiologia", + "label": "Angiologia (Español)" + }, + { + "slug": "angiology", + "label": "Angiology" + }, + { + "slug": "anglia", + "label": "Anglia" + }, + { + "slug": "animal-conservation", + "label": "Animal Conservation" + }, + { + "slug": "animal-migration", + "label": "Animal Migration" + }, + { + "slug": "animal-welfare", + "label": "Animal Welfare" + }, + { + "slug": "animal", + "label": "animal" + }, + { + "slug": "annalen-des-naturhistorischen-museums-in-wien", + "label": "Annalen des Naturhistorischen Museums in Wien" + }, + { + "slug": "annales-de-demographie-historique", + "label": "Annales de démographie historique" + }, + { + "slug": "annales", + "label": "Annales. Histoire, Sciences sociales (Français)" + }, + { + "slug": "annals-of-allergy-asthma-and-immunology", + "label": "Annals of Allergy, Asthma & Immunology" + }, + { + "slug": "annals-of-applied-biology", + "label": "Annals of Applied Biology" + }, + { + "slug": "annals-of-behavioral-medicine", + "label": "Annals of Behavioral Medicine" + }, + { + "slug": "annals-of-biomedical-engineering", + "label": "Annals of Biomedical Engineering" + }, + { + "slug": "annals-of-botany", + "label": "Annals of Botany" + }, + { + "slug": "annals-of-eye-science", + "label": "Annals of Eye Science" + }, + { + "slug": "annals-of-joint", + "label": "Annals of Joint" + }, + { + "slug": "annals-of-laboratory-medicine", + "label": "Annals of Laboratory Medicine" + }, + { + "slug": "annals-of-neurology", + "label": "Annals of Neurology" + }, + { + "slug": "annals-of-oncology", + "label": "Annals of Oncology" + }, + { + "slug": "annals-of-public-and-cooperative-economics", + "label": "Annals of Public and Cooperative Economics" + }, + { + "slug": "annals-of-surgery", + "label": "Annals of Surgery" + }, + { + "slug": "annals-of-the-association-of-american-geographers", + "label": "Annals of the Association of American Geographers" + }, + { + "slug": "annals-of-the-new-york-academy-of-sciences", + "label": "Annals of the New York Academy of Sciences" + }, + { + "slug": "annals-of-work-exposures-and-health", + "label": "Annals of Work Exposures and Health" + }, + { + "slug": "annual-review-of-astronomy-and-astrophysics", + "label": "Annual Review of Astronomy and Astrophysics" + }, + { + "slug": "annual-review-of-linguistics", + "label": "Annual Review of Linguistics" + }, + { + "slug": "annual-review-of-medicine", + "label": "Annual Review of Medicine" + }, + { + "slug": "annual-review-of-nuclear-and-particle-science", + "label": "Annual Review of Nuclear and Particle Science" + }, + { + "slug": "annual-reviews-alphabetical", + "label": "Annual Reviews (sorted alphabetically)" + }, + { + "slug": "annual-reviews-author-date", + "label": "Annual Reviews (author-date)" + }, + { + "slug": "annual-reviews-without-titles", + "label": "Annual Reviews (sorted by order of appearance, without titles)" + }, + { + "slug": "annual-reviews", + "label": "Annual Reviews (sorted by order of appearance)" + }, + { + "slug": "antarctic-science", + "label": "Antarctic Science" + }, + { + "slug": "anthropologie-et-societes", + "label": "Anthropologie et Sociétés (Français)" + }, + { + "slug": "anti-trafficking-review", + "label": "Anti-Trafficking Review" + }, + { + "slug": "anticancer-research", + "label": "Anticancer Research" + }, + { + "slug": "antipode", + "label": "Antipode" + }, + { + "slug": "antiquites-africaines", + "label": "Antiquités africaines" + }, + { + "slug": "antiquity", + "label": "Antiquity" + }, + { + "slug": "apa-5th-edition", + "label": "American Psychological Association 5th edition" + }, + { + "slug": "apa-6th-edition-no-ampersand", + "label": "American Psychological Association 6th edition (no ampersand)" + }, + { + "slug": "apa-6th-edition", + "label": "American Psychological Association 6th edition" + }, + { + "slug": "apa-annotated-bibliography", + "label": "American Psychological Association 7th edition (annotated bibliography)" + }, + { + "slug": "apa-cv", + "label": "American Psychological Association 7th edition (curriculum vitae, sorted by descending date)" + }, + { + "slug": "apa-eu", + "label": "American Psychological Association 7th edition (Basque/Euskara)" + }, + { + "slug": "apa-fr-provost", + "label": "American Psychological Association 6th edition (Provost) (Français - Canada)" + }, + { + "slug": "apa-no-ampersand", + "label": "American Psychological Association 7th edition (no ampersand)" + }, + { + "slug": "apa-no-doi-no-issue", + "label": "American Psychological Association 6th edition (no DOIs, no issue numbers)" + }, + { + "slug": "apa-no-initials", + "label": "American Psychological Association 7th edition (no initials)" + }, + { + "slug": "apa-numeric-superscript-brackets", + "label": "American Psychological Association 7th edition (numeric, brackets)" + }, + { + "slug": "apa-numeric-superscript", + "label": "American Psychological Association 7th edition (numeric, superscript)" + }, + { + "slug": "apa-old-doi-prefix", + "label": "American Psychological Association 6th edition (\"doi:\" DOI prefix)" + }, + { + "slug": "apa-single-spaced", + "label": "American Psychological Association 7th edition (single-spaced bibliography)" + }, + { + "slug": "apa-tr", + "label": "American Psychological Association 6th edition (Türkçe)" + }, + { + "slug": "apa-with-abstract", + "label": "American Psychological Association 7th edition (with abstract)" + }, + { + "slug": "apa", + "label": "American Psychological Association 7th edition" + }, + { + "slug": "aporia-the-nursing-journal", + "label": "Aporia: The Nursing Journal" + }, + { + "slug": "applied-clay-science", + "label": "Applied Clay Science" + }, + { + "slug": "applied-spectroscopy-reviews", + "label": "Applied Spectroscopy Reviews" + }, + { + "slug": "applied-spectroscopy", + "label": "Applied Spectroscopy" + }, + { + "slug": "aquatic-conservation", + "label": "Aquatic Conservation: Marine and Freshwater Ecosystems" + }, + { + "slug": "aquatic-invasions", + "label": "Aquatic Invasions" + }, + { + "slug": "aquatic-living-resources", + "label": "Aquatic Living Resources" + }, + { + "slug": "aquitania", + "label": "Aquitania (Français)" + }, + { + "slug": "arachne", + "label": "Arachne" + }, + { + "slug": "arachnologische-mitteilungen", + "label": "Arachnologische Mitteilungen" + }, + { + "slug": "arachnology", + "label": "Arachnology" + }, + { + "slug": "arbok-hins-islenzka-fornleifafelags", + "label": "Árbók Hins íslenzka fornleifafélags (Íslenska)" + }, + { + "slug": "arcadia-science", + "label": "Arcadia Science" + }, + { + "slug": "archaeologia-austriaca", + "label": "Archaeologia Austriaca" + }, + { + "slug": "archaeometry", + "label": "Archaeometry" + }, + { + "slug": "archaeonautica", + "label": "Archaeonautica" + }, + { + "slug": "archeologia-classica", + "label": "Archeologia Classica (Italiano)" + }, + { + "slug": "archeologicke-rozhledy", + "label": "Archeologické rozhledy" + }, + { + "slug": "archeologie-medievale", + "label": "Archéologie médiévale (Français)" + }, + { + "slug": "archeologies-et-sciences-de-lantiquite", + "label": "Archéologies et Sciences de l'Antiquité (Français)" + }, + { + "slug": "archeosciences", + "label": "ArcheoSciences (Français)" + }, + { + "slug": "archiv-fur-die-civilistische-praxis", + "label": "Archiv für die civilistische Praxis (Deutsch)" + }, + { + "slug": "archiv-fur-geschichte-der-philosophie", + "label": "Archiv für Geschichte der Philosophie" + }, + { + "slug": "archives-of-hand-and-microsurgery", + "label": "Archives of Hand and Microsurgery" + }, + { + "slug": "archives-of-medical-research", + "label": "Archives of Medical Research" + }, + { + "slug": "archives-of-physical-medicine-and-rehabilitation", + "label": "Archives of Physical Medicine and Rehabilitation" + }, + { + "slug": "archivos-de-bronconeumologia", + "label": "Archivos de Bronconeumología" + }, + { + "slug": "archivos-de-la-sociedad-espanola-de-oftalmologia", + "label": "Archivos de la Sociedad Española de Oftalmología (Español)" + }, + { + "slug": "archivum-latinitatis-medii-aevi", + "label": "Archivum Latinitatis Medii Aevi (Français)" + }, + { + "slug": "arctic-antarctic-and-alpine-research", + "label": "Arctic, Antarctic, and Alpine Research" + }, + { + "slug": "arctic", + "label": "Arctic" + }, + { + "slug": "arhiv-za-higijenu-rada-i-toksikologiju", + "label": "Arhiv za higijenu rada i toksikologiju (Archives of Industrial Hygiene and Toxicology)" + }, + { + "slug": "arkivoc", + "label": "Arkivoc" + }, + { + "slug": "art-history", + "label": "Art History" + }, + { + "slug": "art-libraries-society-of-north-america-arlisna-reviews", + "label": "Art Libraries Society of North America: ARLIS/NA Reviews" + }, + { + "slug": "artery-research", + "label": "Artery Research" + }, + { + "slug": "arthritis-and-rheumatism", + "label": "Arthritis & Rheumatism" + }, + { + "slug": "arthropod-systematics-and-phylogeny", + "label": "Arthropod Systematics & Phylogeny" + }, + { + "slug": "arts-university-bournemouth", + "label": "Arts University Bournemouth" + }, + { + "slug": "arzneimitteltherapie", + "label": "Arzneimitteltherapie" + }, + { + "slug": "asa-cssa-sssa", + "label": "American Society of Agronomy, Crop Science Society of America, Soil Science Society of America" + }, + { + "slug": "asaio-journal", + "label": "ASAIO Journal (American Society for Artificial Internal Organs)" + }, + { + "slug": "asia-and-the-pacific-policy-studies", + "label": "Asia & the Pacific Policy Studies" + }, + { + "slug": "asia-pacific-journal-of-human-resources", + "label": "Asia Pacific Journal of Human Resources" + }, + { + "slug": "asian-journal-of-neurosurgery", + "label": "Asian Journal of Neurosurgery" + }, + { + "slug": "asian-myrmecology", + "label": "Asian Myrmecology" + }, + { + "slug": "asian-studies-review", + "label": "Asian Studies Review" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-eceme", + "label": "Escola de Comando e Estado-Maior do Exército - ABNT (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-instituto-meira-mattos", + "label": "Escola de Comando e Estado-Maior do Exército - Instituto Meira Mattos - ABNT (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-ipea", + "label": "Instituto de Pesquisa Econômica Aplicada - ABNT (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-note", + "label": "Associação Brasileira de Normas Técnicas (note, Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-ufmg-face-full", + "label": "Universidade Federal de Minas Gerais - Faculdade de Ciências Econômicas - ABNT (autoria completa) (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-ufmg-face-initials", + "label": "Universidade Federal de Minas Gerais - Faculdade de Ciências Econômicas - ABNT (autoria abreviada) (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-ufpr", + "label": "Universidade Federal do Paraná - ABNT (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-ufrgs-initials", + "label": "Universidade Federal do Rio Grande do Sul - ABNT (autoria abreviada) (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-ufrgs-note-initials-with-ibid", + "label": "Universidade Federal do Rio Grande do Sul - ABNT (autoria abreviada, nota, com Ibid.) (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-ufrgs", + "label": "Universidade Federal do Rio Grande do Sul - ABNT (autoria completa) (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-ufs", + "label": "Universidade Federal de Sergipe - ABNT (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-unirio-eipp", + "label": "Universidade Federal do Estado do Rio de Janeiro - Educação Infantil e Políticas Públicas - ABNT (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas-usp-fmvz", + "label": "Universidade de São Paulo - Faculdade de Medicina Veterinária e Zootecnia - ABNT (Português - Brasil)" + }, + { + "slug": "associacao-brasileira-de-normas-tecnicas", + "label": "Associação Brasileira de Normas Técnicas (Português - Brasil)" + }, + { + "slug": "associacao-nacional-de-pesquisa-e-ensino-em-transportes", + "label": "ANPET - Congresso de Pesquisa e Ensino em Transportes (Português - Brasil)" + }, + { + "slug": "association-de-science-regionale-de-langue-francaise", + "label": "Association de Science Régionale de Langue Française (Français)" + }, + { + "slug": "association-for-computational-linguistics", + "label": "Association for Computational Linguistics - Conference Proceedings" + }, + { + "slug": "association-for-computing-machinery", + "label": "Association for Computing Machinery" + }, + { + "slug": "atlande", + "label": "Atlande (author-date, Français)" + }, + { + "slug": "atlas-of-genetics-and-cytogenetics-in-oncology-and-haematology", + "label": "Atlas of Genetics and Cytogenetics in Oncology and Haematology" + }, + { + "slug": "ausonius-editions", + "label": "Ausonius Éditions" + }, + { + "slug": "austral-ecology", + "label": "Austral Ecology" + }, + { + "slug": "austral-entomology", + "label": "Austral Entomology" + }, + { + "slug": "australasian-journal-of-philosophy", + "label": "Australasian Journal of Philosophy" + }, + { + "slug": "australian-archaeology", + "label": "Australian Archaeology" + }, + { + "slug": "australian-critical-care", + "label": "Australian Critical Care" + }, + { + "slug": "australian-dental-journal", + "label": "Australian Dental Journal" + }, + { + "slug": "australian-guide-to-legal-citation-3rd-edition", + "label": "Australian Guide to Legal Citation 3rd edition" + }, + { + "slug": "australian-guide-to-legal-citation", + "label": "Australian Guide to Legal Citation 4th edition" + }, + { + "slug": "australian-historical-studies", + "label": "Australian Historical Studies" + }, + { + "slug": "australian-journal-of-earth-sciences", + "label": "Australian Journal of Earth Sciences" + }, + { + "slug": "australian-journal-of-grape-and-wine-research", + "label": "Australian Journal of Grape and Wine Research" + }, + { + "slug": "australian-road-research-board", + "label": "Australian Road Research Board" + }, + { + "slug": "australian-veterinary-journal", + "label": "Australian Veterinary Journal" + }, + { + "slug": "austrian-journal-of-development-studies", + "label": "Austrian Journal of Development Studies (Journal für Entwicklungspolitik)" + }, + { + "slug": "austrian-legal", + "label": "Austrian Legal (Deutsch - Österreich)" + }, + { + "slug": "avian-conservation-and-ecology", + "label": "Avian Conservation and Ecology" + }, + { + "slug": "avian-diseases", + "label": "Avian Diseases" + }, + { + "slug": "avian-pathology", + "label": "Avian Pathology" + }, + { + "slug": "ayer", + "label": "Ayer (Español)" + }, + { + "slug": "azr-abkurzungs-und-zitierregeln-der-osterreichischen-rechtssprache-und-europarechtlicher-rechtsquellen", + "label": "AZR - Abkürzungs- und Zitierregeln der österreichischen Rechtssprache und europarechtlicher Rechtsquellen (Deutsch - Österreich)" + }, + { + "slug": "babes-bolyai-university-faculty-of-orthodox-theology", + "label": "Babes-Bolyai University - Faculty of Orthodox Theology (no ibid., Română)" + }, + { + "slug": "babesch-annual-papers-on-mediterranean-archaeology", + "label": "BABESCH - Annual Papers on Mediterranean Archaeology" + }, + { + "slug": "baghdad-science-journal", + "label": "Baghdad Science Journal" + }, + { + "slug": "baishideng-publishing-group", + "label": "Baishideng Publishing Group" + }, + { + "slug": "bakhtiniana-journal-of-discourse-studies", + "label": "Bakhtiniana: Journal of Discourse Studies" + }, + { + "slug": "begell-house-apa", + "label": "Begell House - APA" + }, + { + "slug": "begell-house-chicago-author-date", + "label": "Begell House - Chicago Manual of Style" + }, + { + "slug": "behaviour", + "label": "Behaviour" + }, + { + "slug": "beilstein-journal-of-organic-chemistry", + "label": "Beilstein Journal of Organic Chemistry" + }, + { + "slug": "beltz-padagogik", + "label": "Beltz - Pädagogik (Deutsch)" + }, + { + "slug": "berghahn-books-author-date-en-gb", + "label": "Berghahn Books (author-date, English - UK)" + }, + { + "slug": "berlin-school-of-economics-and-law-international-marketing-management", + "label": "Berlin School of Economics and Law - International Marketing Management" + }, + { + "slug": "bern-university-of-applied-sciences-school-of-agricultural-forest-and-food-sciences-hafl", + "label": "Bern University of Applied Sciences - School of Agricultural, Forest and Food Sciences HAFL (author-date)" + }, + { + "slug": "betriebswirtschaftliche-forschung-und-praxis", + "label": "Betriebswirtschaftliche Forschung und Praxis (Deutsch)" + }, + { + "slug": "biblio-3w", + "label": "Biblio 3W (Español)" + }, + { + "slug": "bibliotheca-hertziana-max-planck-institute-for-art-history", + "label": "Bibliotheca Hertziana - Max Planck Institute for Art History" + }, + { + "slug": "bibliothecae-it", + "label": "Bibliothecae.it (Italiano)" + }, + { + "slug": "bibliothek-forschung-und-praxis", + "label": "Bibliothek – Forschung und Praxis" + }, + { + "slug": "bibliotheque-d-archeologie-mediterraneenne-et-africaine-biama", + "label": "Bibliothèque d'archéologie méditerranéenne et africaine (BiAMA) (Français)" + }, + { + "slug": "bibliotheque-universitaire-de-medecine-vancouver", + "label": "Bibliothèque universitaire de médecine - Vancouver" + }, + { + "slug": "bibtex", + "label": "BibTeX generic citation style" + }, + { + "slug": "biens-symboliques-symbolic-goods", + "label": "Biens symboliques / Symbolic Goods" + }, + { + "slug": "bio-protocol", + "label": "Bio-protocol" + }, + { + "slug": "bioarchaeology-international", + "label": "Bioarchaeology International" + }, + { + "slug": "bioarchaeology-of-the-near-east", + "label": "Bioarchaeology of the Near East" + }, + { + "slug": "biochemical-journal", + "label": "Biochemical Journal" + }, + { + "slug": "biochemical-society-transactions", + "label": "Biochemical Society Transactions" + }, + { + "slug": "biochemistry-and-molecular-biology-education", + "label": "Biochemistry and Molecular Biology Education" + }, + { + "slug": "biochemistry", + "label": "Biochemistry" + }, + { + "slug": "biochimica-et-biophysica-acta", + "label": "Biochimica et Biophysica Acta" + }, + { + "slug": "bioelectromagnetics", + "label": "Bioelectromagnetics" + }, + { + "slug": "bioinformatics", + "label": "Bioinformatics" + }, + { + "slug": "biologia", + "label": "Biologia" + }, + { + "slug": "biological-and-pharmaceutical-bulletin", + "label": "Biological and Pharmaceutical Bulletin" + }, + { + "slug": "biological-journal-of-the-linnean-society", + "label": "Biological Journal of the Linnean Society" + }, + { + "slug": "biological-psychiatry", + "label": "Biological Psychiatry" + }, + { + "slug": "biological-reviews", + "label": "Biological Reviews" + }, + { + "slug": "biologiceskie-membrany", + "label": "Биологические мембраны" + }, + { + "slug": "biology-of-reproduction", + "label": "Biology of Reproduction" + }, + { + "slug": "biomarkers", + "label": "Biomarkers" + }, + { + "slug": "biomed-central", + "label": "BioMed Central" + }, + { + "slug": "biomed-research-international", + "label": "BioMed Research International" + }, + { + "slug": "biometrics", + "label": "Biometrics" + }, + { + "slug": "biomolecular-concepts", + "label": "Biomolecular Concepts" + }, + { + "slug": "biophysical-journal", + "label": "Biophysical Journal" + }, + { + "slug": "biophysics-and-physicobiology", + "label": "Biophysics and Physicobiology" + }, + { + "slug": "biopolymers", + "label": "Biopolymers" + }, + { + "slug": "bioresources", + "label": "BioResources" + }, + { + "slug": "bioscience", + "label": "BioScience" + }, + { + "slug": "biosocieties", + "label": "BioSocieties" + }, + { + "slug": "biostatistics", + "label": "Biostatistics" + }, + { + "slug": "biota-neotropica", + "label": "Biota Neotropica" + }, + { + "slug": "biotechniques", + "label": "BioTechniques" + }, + { + "slug": "biotechnology-and-bioengineering", + "label": "Biotechnology and Bioengineering" + }, + { + "slug": "biotechnology-and-bioprocess-engineering", + "label": "Biotechnology and Bioprocess Engineering" + }, + { + "slug": "biotropica", + "label": "Biotropica" + }, + { + "slug": "bitonline", + "label": "b.i.t.online (note, Deutsch)" + }, + { + "slug": "biuletyn-polskiego-towarzystwa-jezykoznawczego", + "label": "Biuletyn Polskiego Towarzystwa Językoznawczego (Polski)" + }, + { + "slug": "blood", + "label": "Blood" + }, + { + "slug": "bloomsbury-academic", + "label": "Bloomsbury Academic" + }, + { + "slug": "bluebook-inline", + "label": "Bluebook Inline" + }, + { + "slug": "bluebook-law-review", + "label": "Bluebook Law Review" + }, + { + "slug": "bmj", + "label": "BMJ" + }, + { + "slug": "body-and-society", + "label": "Body & Society" + }, + { + "slug": "boletin-de-la-sociedad-geologica-mexicana", + "label": "Boletín de la Sociedad Geológica Mexicana (Español - Mexico)" + }, + { + "slug": "boletin-de-pediatria", + "label": "Boletín de Pediatría (Español)" + }, + { + "slug": "bollettino-d-archeologia-online", + "label": "Bollettino d'archeologia online (Italiano)" + }, + { + "slug": "boreal-environment-research", + "label": "Boreal Environment Research" + }, + { + "slug": "bourgogne-franche-comte-nature", + "label": "Bourgogne-Franche-Comté Nature (Français)" + }, + { + "slug": "brachytherapy", + "label": "Brachytherapy" + }, + { + "slug": "brain-behavior-and-evolution", + "label": "Brain, Behavior and Evolution" + }, + { + "slug": "brazilian-journal-of-experimental-design-data-analysis-and-inferential-statistics", + "label": "Brazilian Journal of Experimental Design, Data Analysis and Inferential Statistics" + }, + { + "slug": "brazilian-journal-of-infectious-diseases", + "label": "Brazilian Journal of Infectious Diseases" + }, + { + "slug": "brazilian-journal-of-psychiatry", + "label": "Brazilian Journal of Psychiatry" + }, + { + "slug": "brazilian-journal-of-veterinary-research-and-animal-science", + "label": "Brazilian Journal of Veterinary Research and Animal Science" + }, + { + "slug": "brazilian-oral-research", + "label": "Brazilian Oral Research" + }, + { + "slug": "brewingscience", + "label": "BrewingScience" + }, + { + "slug": "briefings-in-bioinformatics", + "label": "Briefings in Bioinformatics" + }, + { + "slug": "bristol-university-press", + "label": "Bristol University Press" + }, + { + "slug": "british-journal-of-anaesthesia", + "label": "British Journal of Anaesthesia" + }, + { + "slug": "british-journal-of-cancer", + "label": "British Journal of Cancer" + }, + { + "slug": "british-journal-of-dermatology", + "label": "British Journal of Dermatology" + }, + { + "slug": "british-journal-of-haematology", + "label": "British Journal of Haematology" + }, + { + "slug": "british-journal-of-industrial-relations", + "label": "British Journal of Industrial Relations" + }, + { + "slug": "british-journal-of-pharmacology", + "label": "British Journal of Pharmacology" + }, + { + "slug": "british-journal-of-political-science", + "label": "British Journal of Political Science" + }, + { + "slug": "british-journal-of-surgery", + "label": "British Journal of Surgery" + }, + { + "slug": "budownictwo-i-architektura-pl", + "label": "Budownictwo i Architektura" + }, + { + "slug": "building-structure", + "label": "Building Structure (中文)" + }, + { + "slug": "buletin-agrohorti", + "label": "Buletin Agrohorti" + }, + { + "slug": "bulletin-de-correspondance-hellenique", + "label": "Bulletin de correspondance hellénique" + }, + { + "slug": "bulletin-de-la-societe-entomologique-de-france", + "label": "Bulletin de la Société Entomologique de France" + }, + { + "slug": "bulletin-de-la-societe-prehistorique-francaise", + "label": "Bulletin de la Société préhistorique française (Français)" + }, + { + "slug": "bulletin-du-centre-detudes-medievales-dauxerre", + "label": "Bulletin du Centre d’études médiévales d’Auxerre (Français)" + }, + { + "slug": "bulletin-of-geosciences", + "label": "Bulletin of Geosciences" + }, + { + "slug": "bulletin-of-marine-science", + "label": "Bulletin of Marine Science" + }, + { + "slug": "bulletin-of-the-american-schools-of-oriental-research", + "label": "Bulletin of the American Schools of Oriental Research" + }, + { + "slug": "bulletin-of-the-seismological-society-of-america", + "label": "Bulletin of the Seismological Society of America" + }, + { + "slug": "bursa-uludag-universitesi-egitim-bilimleri-enstitusu", + "label": "Bursa Uludağ Üniversitesi - Eğitim Bilimleri Enstitüsü" + }, + { + "slug": "bursa-uludag-universitesi-saglik-bilimleri-enstitusu", + "label": "Bursa Uludağ Üniversitesi - Sağlık Bilimleri Enstitüsü" + }, + { + "slug": "business-and-human-rights-journal", + "label": "Business and Human Rights Journal" + }, + { + "slug": "business-ethics-a-european-review", + "label": "Business Ethics: A European Review" + }, + { + "slug": "byzantina-symmeikta", + "label": "BYZANTINA SYMMEIKTA" + }, + { + "slug": "byzantine-and-modern-greek-studies", + "label": "Byzantine and Modern Greek Studies" + }, + { + "slug": "cahiers-d-ethnomusicologie", + "label": "Cahiers d'ethnomusicologie (Français)" + }, + { + "slug": "cahiers-du-centre-gustave-glotz", + "label": "Cahiers du Centre Gustave-Glotz (Français)" + }, + { + "slug": "cahiers-mondes-anciens", + "label": "Cahiers Mondes Anciens (Français)" + }, + { + "slug": "california-agriculture", + "label": "California Agriculture" + }, + { + "slug": "cambridge-journal-of-economics", + "label": "Cambridge Journal of Economics" + }, + { + "slug": "cambridge-university-press-author-date-cambridge-a", + "label": "Cambridge University Press, CambridgeA (author-date)" + }, + { + "slug": "cambridge-university-press-author-date", + "label": "Cambridge University Press, CambridgeB (author-date)" + }, + { + "slug": "cambridge-university-press-law-note", + "label": "Cambridge University Press - Law (note)" + }, + { + "slug": "cambridge-university-press-note", + "label": "Cambridge University Press (note)" + }, + { + "slug": "cambridge-university-press-numeric", + "label": "Cambridge University Press (numeric)" + }, + { + "slug": "campus-adventiste-du-saleve-faculte-adventiste-de-theologie", + "label": "Campus adventiste du Salève - Faculté adventiste de théologie (Français)" + }, + { + "slug": "canadian-biosystems-engineering", + "label": "Canadian Biosystems Engineering" + }, + { + "slug": "canadian-geotechnical-journal", + "label": "Canadian Geotechnical Journal" + }, + { + "slug": "canadian-journal-of-chemistry", + "label": "Canadian Journal of Chemistry" + }, + { + "slug": "canadian-journal-of-dietetic-practice-and-research", + "label": "Canadian Journal of Dietetic Practice and Research" + }, + { + "slug": "canadian-journal-of-earth-sciences", + "label": "Canadian Journal of Earth Sciences" + }, + { + "slug": "canadian-journal-of-economics", + "label": "Canadian Journal of Economics" + }, + { + "slug": "canadian-journal-of-fisheries-and-aquatic-sciences", + "label": "Canadian Journal of Fisheries and Aquatic Sciences" + }, + { + "slug": "canadian-journal-of-physics", + "label": "Canadian Journal of Physics" + }, + { + "slug": "canadian-journal-of-public-health", + "label": "Canadian Journal of Public Health" + }, + { + "slug": "canadian-journal-of-soil-science", + "label": "Canadian Journal of Soil Science" + }, + { + "slug": "canadian-public-policy", + "label": "Canadian Public Policy" + }, + { + "slug": "cancer-biomarkers", + "label": "Cancer Biomarkers" + }, + { + "slug": "cancer-drug-resistance", + "label": "Cancer Drug Resistance" + }, + { + "slug": "cancer-translational-medicine", + "label": "Cancer Translational Medicine" + }, + { + "slug": "carcinogenesis", + "label": "Carcinogenesis" + }, + { + "slug": "cardiff-university-harvard", + "label": "Cardiff University - Harvard" + }, + { + "slug": "cardiff-university-vancouver", + "label": "Cardiff University - Vancouver" + }, + { + "slug": "cardiocore", + "label": "Cardiocore (Español)" + }, + { + "slug": "cath-lab-digest", + "label": "Cath Lab Digest" + }, + { + "slug": "catholic-biblical-association", + "label": "Catholic Biblical Association (full note)" + }, + { + "slug": "cell-numeric", + "label": "Cell journals (numeric)" + }, + { + "slug": "cell-research", + "label": "Cell Research" + }, + { + "slug": "cell-structure-and-function", + "label": "Cell Structure and Function" + }, + { + "slug": "cell-transplantation", + "label": "Cell Transplantation" + }, + { + "slug": "cell", + "label": "Cell" + }, + { + "slug": "cellular-and-molecular-bioengineering", + "label": "Cellular and Molecular Bioengineering" + }, + { + "slug": "cellular-and-molecular-gastroenterology-and-hepatology", + "label": "Cellular and Molecular Gastroenterology and Hepatology" + }, + { + "slug": "centaurus", + "label": "Centaurus" + }, + { + "slug": "centre-de-recherche-sur-les-civilisations-de-l-asie-orientale-auteur-date", + "label": "Centre de recherche sur les civilisations de l’Asie orientale (Français - Auteur, Date)" + }, + { + "slug": "centre-de-recherche-sur-les-civilisations-de-l-asie-orientale", + "label": "Centre de recherche sur les civilisations de l'Asie orientale (Français - note)" + }, + { + "slug": "cerebral-cortex", + "label": "Cerebral Cortex" + }, + { + "slug": "ceska-zemedelska-univerzita-v-praze-fakulta-agrobiologie-potravinovych-a-prirodnich-zdroju", + "label": "Česká zemědělská univerzita v Praze - Fakulta agrobiologie, potravinových a přírodních zdrojů" + }, + { + "slug": "changer-d-epoque", + "label": "Changer d'époque (Français)" + }, + { + "slug": "chaucer-review", + "label": "The Chaucer Review" + }, + { + "slug": "chemical-and-pharmaceutical-bulletin", + "label": "Chemical and Pharmaceutical Bulletin" + }, + { + "slug": "chemical-biology-and-drug-design", + "label": "Chemical Biology & Drug Design" + }, + { + "slug": "chemical-engineering-progress", + "label": "Chemical Engineering Progress" + }, + { + "slug": "chemical-engineering-technology", + "label": "Chemical Engineering & Technology" + }, + { + "slug": "chemical-senses", + "label": "Chemical Senses" + }, + { + "slug": "chemie-ingenieur-technik", + "label": "Chemie Ingenieur Technik" + }, + { + "slug": "chemistry-education-research-and-practice", + "label": "Chemistry Education Research and Practice" + }, + { + "slug": "chest", + "label": "Chest" + }, + { + "slug": "chicago-annotated-bibliography", + "label": "Chicago Manual of Style 17th edition (note, annotated bibliography)" + }, + { + "slug": "chicago-author-date-16th-edition", + "label": "Chicago Manual of Style 16th edition (author-date)" + }, + { + "slug": "chicago-author-date-basque", + "label": "Chicago Manual of Style 16th edition (author-date, Euskara)" + }, + { + "slug": "chicago-author-date-de", + "label": "Chicago Manual of Style 16th edition (author-date, Deutsch)" + }, + { + "slug": "chicago-author-date-fr", + "label": "Chicago Manual of Style 17th edition (author-date, Français)" + }, + { + "slug": "chicago-author-date", + "label": "Chicago Manual of Style 17th edition (author-date)" + }, + { + "slug": "chicago-figures", + "label": "Chicago Manual of Style 16th edition (figures and illustrations)" + }, + { + "slug": "chicago-fullnote-bibliography-16th-edition", + "label": "Chicago Manual of Style 16th edition (full note)" + }, + { + "slug": "chicago-fullnote-bibliography-fr", + "label": "Chicago Manual of Style 17th edition (full note, Français)" + }, + { + "slug": "chicago-fullnote-bibliography-short-title-subsequent", + "label": "Chicago Manual of Style 17th edition (full note, short title subsequent)" + }, + { + "slug": "chicago-fullnote-bibliography-with-ibid", + "label": "Chicago Manual of Style 17th edition (full note, with Ibid.)" + }, + { + "slug": "chicago-fullnote-bibliography", + "label": "Chicago Manual of Style 17th edition (full note)" + }, + { + "slug": "chicago-library-list", + "label": "Chicago Manual of Style 17th edition (library list)" + }, + { + "slug": "chicago-note-bibliography-16th-edition", + "label": "Chicago Manual of Style 16th edition (note)" + }, + { + "slug": "chicago-note-bibliography-with-ibid", + "label": "Chicago Manual of Style 17th edition (note, with Ibid.)" + }, + { + "slug": "chicago-note-bibliography", + "label": "Chicago Manual of Style 17th edition (note)" + }, + { + "slug": "chimia", + "label": "CHIMIA" + }, + { + "slug": "china-information", + "label": "China Information" + }, + { + "slug": "china-national-standard-gb-t-7714-2015-author-date", + "label": "China National Standard GB/T 7714-2015 (author-date, 中文)" + }, + { + "slug": "china-national-standard-gb-t-7714-2015-note", + "label": "China National Standard GB/T 7714-2015 (note, 中文)" + }, + { + "slug": "china-national-standard-gb-t-7714-2015-numeric", + "label": "China National Standard GB/T 7714-2015 (numeric, 中文)" + }, + { + "slug": "chinese-gb7714-1987-numeric", + "label": "China National Standard GB/T 7714-1987 (numeric, 中文)" + }, + { + "slug": "chinese-gb7714-2005-author-date", + "label": "China National Standard GB/T 7714-2005 (author-date, 中文)" + }, + { + "slug": "chinese-gb7714-2005-numeric", + "label": "China National Standard GB/T 7714-2005 (numeric, 中文)" + }, + { + "slug": "chinese-journal-of-aeronautics", + "label": "Chinese Journal of Aeronautics" + }, + { + "slug": "chinese-medical-journal", + "label": "Chinese Medical Journal" + }, + { + "slug": "chroniques-des-activites-archeologiques-de-l-ecole-francaise-de-rome", + "label": "Chroniques des activités archéologiques de l'Ecole française de Rome" + }, + { + "slug": "chungara-revista-de-antropologia-chilena", + "label": "Chungara Revista de Antropología Chilena (Español - Chile)" + }, + { + "slug": "circulation-journal", + "label": "Circulation Journal" + }, + { + "slug": "circulation", + "label": "Circulation" + }, + { + "slug": "cirugia-cardiovascular", + "label": "Cirugia Cardiovascular (Español)" + }, + { + "slug": "citation-compass-apa-note", + "label": "Citation Compass (Kildekompasset) - APA (note)" + }, + { + "slug": "citizen-science-theory-and-practice", + "label": "Citizen Science: Theory and Practice" + }, + { + "slug": "civilta-italiana", + "label": "Civiltà Italiana (Italiano)" + }, + { + "slug": "civitas-revista-de-ciencias-sociais", + "label": "Civitas: Revista de Ciências Sociais" + }, + { + "slug": "cladistics", + "label": "Cladistics" + }, + { + "slug": "clara-architecture-recherche", + "label": "CLARA Architecture/Recherche (Français)" + }, + { + "slug": "clay-minerals", + "label": "Clay Minerals" + }, + { + "slug": "clays-and-clay-minerals", + "label": "Clays and Clay Minerals" + }, + { + "slug": "climate-change-economics", + "label": "Climate Change Economics" + }, + { + "slug": "clinica-e-investigacion-en-arteriosclerosis", + "label": "Clínica e Investigación en Arteriosclerosis (Español)" + }, + { + "slug": "clinical-anatomy", + "label": "Clinical Anatomy" + }, + { + "slug": "clinical-dysmorphology", + "label": "Clinical Dysmorphology" + }, + { + "slug": "clinical-gastroenterology-and-hepatology", + "label": "Clinical Gastroenterology and Hepatology" + }, + { + "slug": "clinical-hemorheology-and-microcirculation", + "label": "Clinical Hemorheology and Microcirculation" + }, + { + "slug": "clinical-infectious-diseases", + "label": "Clinical Infectious Diseases" + }, + { + "slug": "clinical-journal-of-sport-medicine", + "label": "Clinical Journal of Sport Medicine" + }, + { + "slug": "clinical-journal-of-the-american-society-of-nephrology", + "label": "Clinical Journal of the American Society of Nephrology" + }, + { + "slug": "clinical-management-issues", + "label": "Clinical Management Issues" + }, + { + "slug": "clinical-nuclear-medicine", + "label": "Clinical Nuclear Medicine" + }, + { + "slug": "clinical-oral-implants-research", + "label": "Clinical Oral Implants Research" + }, + { + "slug": "clinical-orthopaedics-and-related-research", + "label": "Clinical Orthopaedics and Related Research" + }, + { + "slug": "clinical-otolaryngology", + "label": "Clinical Otolaryngology" + }, + { + "slug": "clinical-pharmacology-and-therapeutics", + "label": "Clinical Pharmacology & Therapeutics" + }, + { + "slug": "clinical-physiology-and-functional-imaging", + "label": "Clinical Physiology and Functional Imaging" + }, + { + "slug": "clinical-radiology", + "label": "Clinical Radiology" + }, + { + "slug": "clinical-spine-surgery", + "label": "Clinical Spine Surgery" + }, + { + "slug": "clio-medica", + "label": "Clio Medica" + }, + { + "slug": "cns-and-neurological-disorders-drug-targets", + "label": "CNS & Neurological Disorders - Drug Targets" + }, + { + "slug": "cns-spectrums", + "label": "CNS Spectrums" + }, + { + "slug": "cold-spring-harbor-laboratory-press", + "label": "Cold Spring Harbor Laboratory Press" + }, + { + "slug": "collection-de-l-ecole-francaise-de-rome-full-note", + "label": "Collection de l'Ecole française de Rome (full note, Français)" + }, + { + "slug": "collection-de-l-ecole-francaise-de-rome-note", + "label": "Collection de l'Ecole française de Rome (note, Français)" + }, + { + "slug": "collection-du-centre-jean-berard", + "label": "Collection du Centre Jean-Bérard (Français)" + }, + { + "slug": "collections-electroniques-de-l-inha-author-date", + "label": "Collections électroniques de l'INHA (author-date, Français)" + }, + { + "slug": "collections-electroniques-de-l-inha-full-note", + "label": "Collections électroniques de l'INHA (full note, Français)" + }, + { + "slug": "college-montmorency", + "label": "Collège Montmorency (note, Français - Canada)" + }, + { + "slug": "college-of-naturopathic-medicine", + "label": "College of Naturopathic Medicine" + }, + { + "slug": "colombian-journal-of-anesthesiology", + "label": "Colombian Journal of Anesthesiology" + }, + { + "slug": "colorado-state-university-school-of-biomedical-engineering", + "label": "Colorado State University - School of Biomedical Engineering" + }, + { + "slug": "comision-economica-para-america-latina-y-el-caribe", + "label": "Comisión Económica para América Latina y el Caribe (Español)" + }, + { + "slug": "common-market-law-review", + "label": "Common Market Law Review" + }, + { + "slug": "communication-et-langages", + "label": "Communication et Langages" + }, + { + "slug": "comparativ", + "label": "Comparativ" + }, + { + "slug": "comparative-politics", + "label": "Comparative Politics" + }, + { + "slug": "comparative-population-studies", + "label": "Comparative Population Studies" + }, + { + "slug": "comptes-rendus-author-date", + "label": "Comptes Rendus (author-date)" + }, + { + "slug": "comptes-rendus-numeric", + "label": "Comptes Rendus (numeric)" + }, + { + "slug": "computer-supported-cooperative-work", + "label": "Computer Supported Cooperative Work" + }, + { + "slug": "computer-und-recht", + "label": "Computer und Recht (Deutsch)" + }, + { + "slug": "conservation-and-society", + "label": "Conservation & Society" + }, + { + "slug": "conservation-biology", + "label": "Conservation Biology" + }, + { + "slug": "conservation-letters", + "label": "Conservation Letters" + }, + { + "slug": "conservation-physiology", + "label": "Conservation Physiology" + }, + { + "slug": "constructivist-foundations", + "label": "Constructivist Foundations" + }, + { + "slug": "contemporary-accounting-research", + "label": "Contemporary Accounting Research" + }, + { + "slug": "continuity-and-change", + "label": "Continuity and Change" + }, + { + "slug": "contributions-to-the-archaeology-of-egypt-nubia-and-the-levant", + "label": "Contributions to the Archaeology of Egypt, Nubia and the Levant" + }, + { + "slug": "copeia", + "label": "Copeia" + }, + { + "slug": "copernicus-publications", + "label": "Copernicus Publications" + }, + { + "slug": "coral-reefs", + "label": "Coral Reefs" + }, + { + "slug": "cornea", + "label": "Cornea" + }, + { + "slug": "corrosion", + "label": "Corrosion" + }, + { + "slug": "council-of-science-editors-alphabetical", + "label": "Council of Science Editors, Citation-Name (numeric, sorted alphabetically)" + }, + { + "slug": "council-of-science-editors-author-date", + "label": "Council of Science Editors, Name-Year (author-date)" + }, + { + "slug": "council-of-science-editors-brackets", + "label": "Council of Science Editors, Citation-Sequence (numeric, brackets)" + }, + { + "slug": "council-of-science-editors", + "label": "Council of Science Editors, Citation-Sequence (numeric)" + }, + { + "slug": "cranfield-university-numeric", + "label": "Cranfield University (numeric)" + }, + { + "slug": "creativity-and-innovation-management", + "label": "Creativity and Innovation Management" + }, + { + "slug": "critical-care-medicine", + "label": "Critical Care Medicine" + }, + { + "slug": "critical-reviews-in-plant-sciences", + "label": "Critical Reviews in Plant Sciences" + }, + { + "slug": "critical-reviews-in-solid-state-and-materials-sciences", + "label": "Critical Reviews in Solid State and Materials Sciences" + }, + { + "slug": "crop-breeding-and-applied-biotechnology", + "label": "Crop Breeding and Applied Biotechnology" + }, + { + "slug": "crustaceana", + "label": "Crustaceana" + }, + { + "slug": "cuadernos-de-filologia-clasica", + "label": "Cuadernos de Filología Clásica. Estudios Griegos e Indoeuropeos (autor-año, Español)" + }, + { + "slug": "cultivos-tropicales", + "label": "Cultivos Tropicales (Español)" + }, + { + "slug": "cultural-geographies", + "label": "cultural geographies" + }, + { + "slug": "cultural-studies-of-science-education", + "label": "Cultural Studies of Science Education" + }, + { + "slug": "culture-medicine-and-psychiatry", + "label": "Culture, Medicine, and Psychiatry" + }, + { + "slug": "cureus", + "label": "Cureus" + }, + { + "slug": "current-alzheimer-research", + "label": "Current Alzheimer Research" + }, + { + "slug": "current-gene-therapy", + "label": "Current Gene Therapy" + }, + { + "slug": "current-neurology-aktualnosci-neurologiczne", + "label": "Current Neurology - Aktualności Neurologiczne" + }, + { + "slug": "current-opinion-in-endocrinology-diabetes-and-obesity", + "label": "Current Opinion in Endocrinology, Diabetes and Obesity" + }, + { + "slug": "current-opinion", + "label": "Current Opinion journals" + }, + { + "slug": "current-organic-synthesis", + "label": "Current Organic Synthesis" + }, + { + "slug": "current-pharmaceutical-design", + "label": "Current Pharmaceutical Design" + }, + { + "slug": "current-proteomics", + "label": "Current Proteomics" + }, + { + "slug": "current-protocols", + "label": "Current Protocols journals" + }, + { + "slug": "current-science", + "label": "Current Science" + }, + { + "slug": "current-topics-in-medicinal-chemistry", + "label": "Current Topics in Medicinal Chemistry" + }, + { + "slug": "currents-in-biblical-research", + "label": "Currents in Biblical Research" + }, + { + "slug": "cybium", + "label": "Cybium" + }, + { + "slug": "cytometry", + "label": "Cytometry" + }, + { + "slug": "czech-journal-of-international-relations", + "label": "Czech Journal of International Relations" + }, + { + "slug": "data-science-journal", + "label": "Data Science Journal" + }, + { + "slug": "database", + "label": "Database" + }, + { + "slug": "de-buck", + "label": "De Buck (Nederlands)" + }, + { + "slug": "de-montfort-university-harvard", + "label": "De Montfort University - Harvard" + }, + { + "slug": "decision-sciences", + "label": "Decision Sciences" + }, + { + "slug": "demographic-research", + "label": "Demographic Research" + }, + { + "slug": "der-moderne-staat", + "label": "der moderne staat (Deutsch)" + }, + { + "slug": "dermatology-online-journal", + "label": "Dermatology Online Journal" + }, + { + "slug": "deutsche-gesellschaft-fur-psychologie", + "label": "Deutsche Gesellschaft für Psychologie 5. Auflage (Deutsch)" + }, + { + "slug": "deutsche-sprache", + "label": "Deutsche Sprache (Deutsch)" + }, + { + "slug": "deutsche-zeitschrift-fur-sportmedizin", + "label": "Deutsche Zeitschrift für Sportmedizin" + }, + { + "slug": "deutsches-archaologisches-institut", + "label": "Deutsches Archäologisches Institut" + }, + { + "slug": "deutsches-arzteblatt", + "label": "Deutsches Ärzteblatt" + }, + { + "slug": "developing-world-bioethics", + "label": "Developing World Bioethics" + }, + { + "slug": "development-and-change", + "label": "Development and Change" + }, + { + "slug": "development-policy-review", + "label": "Development Policy Review" + }, + { + "slug": "developmental-dynamics", + "label": "Developmental Dynamics" + }, + { + "slug": "developmental-medicine-and-child-neurology", + "label": "Developmental Medicine & Child Neurology" + }, + { + "slug": "developmental-neurobiology", + "label": "Developmental Neurobiology" + }, + { + "slug": "diabetologia", + "label": "Diabetologia" + }, + { + "slug": "diagnostico-prenatal", + "label": "Diagnóstico Prenatal (Español)" + }, + { + "slug": "dialisis-y-trasplante", + "label": "Dialisis y Trasplante (Español)" + }, + { + "slug": "diatom-research", + "label": "Diatom Research" + }, + { + "slug": "die-bachelorarbeit-samac-et-al-in-text", + "label": "Die Bachelorarbeit (Samac et al.) (in-text, Deutsch)" + }, + { + "slug": "die-bachelorarbeit-samac-et-al-note", + "label": "Die Bachelorarbeit (Samac et al.) (note, Deutsch)" + }, + { + "slug": "digital-humanities-im-deutschsprachigen-raum", + "label": "Digital Humanities im deutschsprachigen Raum (Deutsch)" + }, + { + "slug": "digital-scholarship-in-the-humanities", + "label": "Digital Scholarship in the Humanities" + }, + { + "slug": "din-1505-2-alphanumeric", + "label": "DIN 1505-2 (alphanumeric, Deutsch) - standard superseded by ISO-690" + }, + { + "slug": "din-1505-2-numeric-alphabetical", + "label": "DIN 1505-2 (numeric, sorted alphabetically, Deutsch) - standard superseded by ISO-690" + }, + { + "slug": "din-1505-2-numeric", + "label": "DIN 1505-2 (numeric, Deutsch) - standard superseded by ISO-690" + }, + { + "slug": "din-1505-2", + "label": "DIN 1505-2 (author-date, Deutsch) - standard superseded by ISO-690" + }, + { + "slug": "diplo", + "label": "Diplo" + }, + { + "slug": "disability-and-rehabilitation", + "label": "Disability and Rehabilitation" + }, + { + "slug": "discovery-medicine", + "label": "Discovery Medicine" + }, + { + "slug": "dna-research", + "label": "DNA Research" + }, + { + "slug": "documents-d-archeologie-francaise", + "label": "Documents d'archéologie française (Français)" + }, + { + "slug": "donau-universitat-krems-department-fur-e-governance-in-wirthschaft-und-verwaltung", + "label": "Donau-Universität Krems - Department für E-Governance in Wirtschaft und Verwaltung (Deutsch - Österreich)" + }, + { + "slug": "drug-development-research", + "label": "Drug Development Research" + }, + { + "slug": "drug-testing-and-analysis", + "label": "Drug Testing and Analysis" + }, + { + "slug": "drugs-of-today", + "label": "Drugs of Today" + }, + { + "slug": "duale-hochschule-baden-wurttemberg-department-of-international-business", + "label": "Duale Hochschule Baden-Württemberg - Department of International Business" + }, + { + "slug": "durban-university-of-technology-harvard", + "label": "Durban University of Technology - Harvard" + }, + { + "slug": "e3s-web-of-conferences", + "label": "E3S Web of Conferences" + }, + { + "slug": "ear-and-hearing", + "label": "Ear and Hearing" + }, + { + "slug": "early-christianity", + "label": "Early Christianity" + }, + { + "slug": "early-medieval-europe", + "label": "Early Medieval Europe" + }, + { + "slug": "early-music-history", + "label": "Early Music History" + }, + { + "slug": "earth-surface-processes-and-landforms", + "label": "Earth Surface Processes and Landforms" + }, + { + "slug": "earthquake-engineering-and-structural-dynamics", + "label": "Earthquake Engineering & Structural Dynamics" + }, + { + "slug": "earthquake-spectra", + "label": "Earthquake Spectra" + }, + { + "slug": "ecclesial-practices", + "label": "Ecclesial Practices" + }, + { + "slug": "ecole-de-technologie-superieure-apa", + "label": "École de technologie supérieure - APA (Français - Canada)" + }, + { + "slug": "ecole-pratique-des-hautes-etudes-sciences-historiques-et-philologiques", + "label": "École Pratique des Hautes Études - Sciences historiques et philologiques (Français)" + }, + { + "slug": "ecological-entomology", + "label": "Ecological Entomology" + }, + { + "slug": "ecological-restoration", + "label": "Ecological Restoration" + }, + { + "slug": "ecology-and-society", + "label": "Ecology and Society" + }, + { + "slug": "ecology-letters", + "label": "Ecology Letters" + }, + { + "slug": "ecology-of-freshwater-fish", + "label": "Ecology of Freshwater Fish" + }, + { + "slug": "ecology", + "label": "Ecology" + }, + { + "slug": "econometrica", + "label": "Econometrica" + }, + { + "slug": "economia-y-politica", + "label": "Economía y Política (Español - Chile)" + }, + { + "slug": "economic-commission-for-latin-america-and-the-caribbean", + "label": "Economic Commission for Latin America and the Caribbean" + }, + { + "slug": "economic-geology", + "label": "Economic Geology" + }, + { + "slug": "economie-et-statistique", + "label": "Économie et Statistique (Français)" + }, + { + "slug": "ecoscience", + "label": "Écoscience" + }, + { + "slug": "ecosistemas", + "label": "Ecosistemas (Español)" + }, + { + "slug": "ecosystems", + "label": "Ecosystems" + }, + { + "slug": "edward-elgar-business-and-social-sciences", + "label": "Edward Elgar Publishing - Business and Social Sciences" + }, + { + "slug": "effective-altruism-wiki", + "label": "Effective Altruism Wiki" + }, + { + "slug": "egretta", + "label": "Egretta (Deutsch - Österreich)" + }, + { + "slug": "einaudi", + "label": "Einaudi (Italiano)" + }, + { + "slug": "eksploatacja-i-niezawodnosc", + "label": "Eksploatacja i Niezawodnosc - Maintenance and Reliability" + }, + { + "slug": "el-profesional-de-la-informacion", + "label": "Profesional de la información (Español)" + }, + { + "slug": "electrophoresis", + "label": "Electrophoresis" + }, + { + "slug": "elementa", + "label": "Elementa" + }, + { + "slug": "elife", + "label": "eLife" + }, + { + "slug": "elsevier-american-chemical-society", + "label": "Elsevier - American Chemical Society" + }, + { + "slug": "elsevier-harvard-without-titles", + "label": "Elsevier - Harvard (without titles)" + }, + { + "slug": "elsevier-harvard", + "label": "Elsevier - Harvard (with titles)" + }, + { + "slug": "elsevier-harvard2", + "label": "Elsevier - Harvard 2" + }, + { + "slug": "elsevier-vancouver-author-date", + "label": "Elsevier - Vancouver (author-date)" + }, + { + "slug": "elsevier-vancouver", + "label": "Elsevier - Vancouver" + }, + { + "slug": "elsevier-with-titles-alphabetical", + "label": "Elsevier (numeric, with titles, sorted alphabetically)" + }, + { + "slug": "elsevier-with-titles", + "label": "Elsevier (numeric, with titles)" + }, + { + "slug": "elsevier-without-titles", + "label": "Elsevier (numeric, without titles)" + }, + { + "slug": "embnet-journal", + "label": "EMBnet.journal" + }, + { + "slug": "embo-press", + "label": "EMBO Press" + }, + { + "slug": "emerald-harvard", + "label": "Emerald - Harvard" + }, + { + "slug": "emu-austral-ornithology", + "label": "Emu - Austral Ornithology" + }, + { + "slug": "endocrine-connections", + "label": "Endocrine Connections" + }, + { + "slug": "endocrine-journal", + "label": "Endocrine Journal" + }, + { + "slug": "endocrine-press", + "label": "Endocrine Press" + }, + { + "slug": "endoscopia", + "label": "Endoscopia (Español)" + }, + { + "slug": "energy-research-and-social-science", + "label": "Energy Research & Social Science" + }, + { + "slug": "eneuro", + "label": "eNeuro" + }, + { + "slug": "enfermeria-clinica", + "label": "Enfermería Clínica (Español)" + }, + { + "slug": "enfermeria-intensiva", + "label": "Enfermería Intensiva (Español)" + }, + { + "slug": "engineered-regeneration", + "label": "Engineered Regeneration" + }, + { + "slug": "engineering-in-life-sciences", + "label": "Engineering in Life Sciences" + }, + { + "slug": "engineering-technology-and-applied-science-research", + "label": "Engineering, Technology & Applied Science Research" + }, + { + "slug": "ens-de-lyon-centre-d-ingenierie-documentaire", + "label": "ENS de Lyon - Centre d'ingénierie documentaire (Français)" + }, + { + "slug": "entecho", + "label": "ENTECHO (Čeština)" + }, + { + "slug": "entomologia-experimentalis-et-applicata", + "label": "Entomologia Experimentalis et Applicata" + }, + { + "slug": "entomological-review", + "label": "Entomological Review" + }, + { + "slug": "entomological-society-of-america", + "label": "Entomological Society of America" + }, + { + "slug": "environment-and-planning", + "label": "Environment and Planning" + }, + { + "slug": "environment-and-urbanization", + "label": "Environment and Urbanization" + }, + { + "slug": "environmental-and-engineering-geoscience", + "label": "Environmental & Engineering Geoscience" + }, + { + "slug": "environmental-chemistry", + "label": "Environmental Chemistry" + }, + { + "slug": "environmental-conservation", + "label": "Environmental Conservation" + }, + { + "slug": "environmental-health-perspectives", + "label": "Environmental Health Perspectives" + }, + { + "slug": "environmental-microbiology", + "label": "Environmental Microbiology" + }, + { + "slug": "environmental-values", + "label": "Environmental Values" + }, + { + "slug": "environnement-risques-et-sante", + "label": "Environnement, Risques & Santé" + }, + { + "slug": "ephemerides-theologicae-lovanienses", + "label": "Ephemerides Theologicae Lovanienses" + }, + { + "slug": "epidemiologie-et-sante-animale", + "label": "Épidémiologie et Santé Animale" + }, + { + "slug": "epidemiology-and-infection", + "label": "Epidemiology & Infection" + }, + { + "slug": "epilepsia", + "label": "Epilepsia" + }, + { + "slug": "equine-veterinary-education", + "label": "Equine Veterinary Education" + }, + { + "slug": "equine-veterinary-journal", + "label": "Equine Veterinary Journal" + }, + { + "slug": "ergo", + "label": "Ergo" + }, + { + "slug": "ergoscience", + "label": "ergoscience" + }, + { + "slug": "errata", + "label": "Errata: Publicação sobre processos editoriais (Português - Brasil)" + }, + { + "slug": "escuela-nacional-de-antropologia-e-historia-author-date", + "label": "Escuela Nacional de Antropología e Historia (autor-fecha, Español - México)" + }, + { + "slug": "escuela-nacional-de-antropologia-e-historia-full-note", + "label": "Escuela Nacional de Antropología e Historia (nota completa, Español - México)" + }, + { + "slug": "escuela-nacional-de-antropologia-e-historia-short-note", + "label": "Escuela Nacional de Antropología e Historia (nota corta, Español - México)" + }, + { + "slug": "estonian-journal-of-earth-sciences", + "label": "Estonian Journal of Earth Sciences" + }, + { + "slug": "estuaries-and-coasts", + "label": "Estuaries and Coasts" + }, + { + "slug": "estudios-de-cultura-maya", + "label": "Estudios de Cultura Maya (Español - México)" + }, + { + "slug": "estudios-de-fonetica-experimental", + "label": "Estudios de Fonética Experimental" + }, + { + "slug": "estudios-hispanicos", + "label": "Estudios Hispánicos (Español)" + }, + { + "slug": "ethics-book-reviews", + "label": "Ethics (for book reviews)" + }, + { + "slug": "ethnobiology-and-conservation", + "label": "Ethnobiology and Conservation" + }, + { + "slug": "ethnobiology-letters", + "label": "Ethnobiology Letters" + }, + { + "slug": "ethnographiques-org", + "label": "ethnographiques.org (Français)" + }, + { + "slug": "ethnologie-francaise", + "label": "Ethnologie française (Français)" + }, + { + "slug": "ethnomusicology", + "label": "Ethnomusicology" + }, + { + "slug": "etri-journal", + "label": "ETRI Journal" + }, + { + "slug": "ets-ecole-de-technologie-superieure", + "label": "ÉTS - École de technologie supérieure (Français - Canada)" + }, + { + "slug": "eunomia-revista-en-cultura-de-la-legalidad", + "label": "EUNOMÍA. Revista en Cultura de la Legalidad (Español)" + }, + { + "slug": "eurasian-journal-of-medical-investigation", + "label": "Eurasian Journal of Medical Investigation" + }, + { + "slug": "eurasian-journal-of-medicine-and-oncology", + "label": "Eurasian Journal of Medicine and Oncology" + }, + { + "slug": "eurointervention", + "label": "EuroIntervention" + }, + { + "slug": "europace", + "label": "Europace" + }, + { + "slug": "european-cells-and-materials", + "label": "European Cells & Materials" + }, + { + "slug": "european-journal-for-philosophy-of-religion", + "label": "European Journal for Philosophy of Religion" + }, + { + "slug": "european-journal-of-anaesthesiology", + "label": "European Journal of Anaesthesiology" + }, + { + "slug": "european-journal-of-clinical-microbiology-and-infectious-diseases", + "label": "European Journal of Clinical Microbiology & Infectious Diseases" + }, + { + "slug": "european-journal-of-emergency-medicine", + "label": "European Journal of Emergency Medicine" + }, + { + "slug": "european-journal-of-endocrinology", + "label": "European Journal of Endocrinology" + }, + { + "slug": "european-journal-of-entomology", + "label": "European Journal of Entomology" + }, + { + "slug": "european-journal-of-human-genetics", + "label": "European Journal of Human Genetics" + }, + { + "slug": "european-journal-of-immunology", + "label": "European Journal of Immunology" + }, + { + "slug": "european-journal-of-information-systems", + "label": "European Journal of Information Systems" + }, + { + "slug": "european-journal-of-international-law", + "label": "European Journal of International Law" + }, + { + "slug": "european-journal-of-microbiology-and-immunology", + "label": "European Journal of Microbiology & Immunology" + }, + { + "slug": "european-journal-of-neuroscience", + "label": "European Journal of Neuroscience" + }, + { + "slug": "european-journal-of-ophthalmology", + "label": "European Journal of Ophthalmology" + }, + { + "slug": "european-journal-of-paediatric-neurology", + "label": "European Journal of Paediatric Neurology" + }, + { + "slug": "european-journal-of-pain", + "label": "European Journal of Pain" + }, + { + "slug": "european-journal-of-political-research", + "label": "European Journal of Political Research" + }, + { + "slug": "european-journal-of-public-health", + "label": "European Journal of Public Health" + }, + { + "slug": "european-journal-of-soil-science", + "label": "European Journal of Soil Science" + }, + { + "slug": "european-journal-of-taxonomy", + "label": "European Journal of Taxonomy" + }, + { + "slug": "european-journal-of-theology", + "label": "European Journal of Theology" + }, + { + "slug": "european-journal-of-ultrasound", + "label": "European Journal of Ultrasound (Ultraschall in der Medizin)" + }, + { + "slug": "european-journal-of-vascular-and-endovascular-surgery", + "label": "European Journal of Vascular and Endovascular Surgery" + }, + { + "slug": "european-respiratory-journal", + "label": "European Respiratory Journal" + }, + { + "slug": "european-retail-research", + "label": "European Retail Research" + }, + { + "slug": "european-review-of-agricultural-economics", + "label": "European Review of Agricultural Economics" + }, + { + "slug": "european-review-of-international-studies", + "label": "European Review of International Studies" + }, + { + "slug": "european-society-of-cardiology", + "label": "European Society of Cardiology" + }, + { + "slug": "european-union-interinstitutional-style-guide-author-date", + "label": "European Union - Interinstitutional Style Guide (author-date)" + }, + { + "slug": "european-union-interinstitutional-style-guide", + "label": "European Union - Interinstitutional Style Guide (note)" + }, + { + "slug": "eva-berlin-konferenz", + "label": "EVA Berlin Konferenz (Deutsch)" + }, + { + "slug": "evidence-based-complementary-and-alternative-medicine", + "label": "Evidence-Based Complementary and Alternative Medicine" + }, + { + "slug": "evolution-and-development", + "label": "Evolution & Development" + }, + { + "slug": "evolution-letters", + "label": "Evolution Letters" + }, + { + "slug": "evolution", + "label": "Evolution" + }, + { + "slug": "evolutionary-anthropology", + "label": "Evolutionary Anthropology" + }, + { + "slug": "evolutionary-ecology-research", + "label": "Evolutionary Ecology Research" + }, + { + "slug": "excli-journal", + "label": "EXCLI Journal" + }, + { + "slug": "exercer", + "label": "exercer (Français)" + }, + { + "slug": "experimental-biology-and-medicine", + "label": "Experimental Biology and Medicine" + }, + { + "slug": "experimental-biomedical-research", + "label": "Experimental Biomedical Research" + }, + { + "slug": "expert-reviews-in-molecular-medicine", + "label": "Expert Reviews in Molecular Medicine" + }, + { + "slug": "exploration-of-targeted-anti-tumor-therapy", + "label": "Exploration of Targeted Anti-tumor Therapy" + }, + { + "slug": "express-polymer-letters", + "label": "eXPRESS Polymer Letters" + }, + { + "slug": "extracellular-vesicles-and-circulating-nucleic-acids", + "label": "Extracellular Vesicles and Circulating Nucleic Acids" + }, + { + "slug": "eye", + "label": "Eye" + }, + { + "slug": "fachhochschule-kiel-fachbereich-medien", + "label": "Fachhochschule Kiel - Fachbereich Medien (Deutsch)" + }, + { + "slug": "fachhochschule-sudwestfalen", + "label": "Fachhochschule Südwestfalen (Deutsch)" + }, + { + "slug": "fachhochschule-vorarlberg-author-date", + "label": "Fachhochschule Vorarlberg (author-date)" + }, + { + "slug": "fachhochschule-vorarlberg-note", + "label": "Fachhochschule Vorarlberg (note)" + }, + { + "slug": "facial-plastic-surgery-clinics-of-north-america", + "label": "Facial Plastic Surgery Clinics of North America" + }, + { + "slug": "facolta-teologica-dell-italia-settentrionale-milano", + "label": "Facoltà Teologica dell'Italia Settentrionale - Milano (titoli di riviste non abbreviati, Italiano)" + }, + { + "slug": "family-business-review", + "label": "Family Business Review" + }, + { + "slug": "farmeconomia", + "label": "Farmeconomia. Health Economics and Therapeutic Pathways" + }, + { + "slug": "fatigue-and-fracture-of-engineering-materials-and-structures", + "label": "Fatigue & Fracture of Engineering Materials & Structures" + }, + { + "slug": "feminist-economics", + "label": "Feminist Economics" + }, + { + "slug": "feminist-theory", + "label": "Feminist Theory" + }, + { + "slug": "ferdinand-porsche-fern-fachhochschule", + "label": "Ferdinand Porsche Fernfachhochschule (Deutsch - Österreich)" + }, + { + "slug": "fertility-and-sterility", + "label": "Fertility and Sterility" + }, + { + "slug": "finance-and-society", + "label": "Finance and Society" + }, + { + "slug": "finanzarchiv", + "label": "FinanzArchiv - Public Finance Analysis" + }, + { + "slug": "fine-focus", + "label": "Fine Focus" + }, + { + "slug": "first-break", + "label": "First Break" + }, + { + "slug": "first-monday", + "label": "First Monday" + }, + { + "slug": "fishery-bulletin", + "label": "Fishery Bulletin" + }, + { + "slug": "flavour-and-fragrance-journal", + "label": "Flavour and Fragrance Journal" + }, + { + "slug": "florida-entomologist", + "label": "Florida Entomologist" + }, + { + "slug": "focaal-journal-of-global-and-historical-anthropology", + "label": "Focaal—Journal of Global and Historical Anthropology" + }, + { + "slug": "foerster-geisteswissenschaft", + "label": "Sascha Foerster - Geisteswissenschaft (Deutsch)" + }, + { + "slug": "fold-and-r", + "label": "FOLD&R (Fasti On Line Documents & Research)" + }, + { + "slug": "folia-biologica", + "label": "Folia Biologica" + }, + { + "slug": "folia-morphologia", + "label": "Folia Morphologia" + }, + { + "slug": "food-and-agriculture-organization-of-the-united-nations-numeric", + "label": "Food and Agriculture Organization of the United Nations (numeric)" + }, + { + "slug": "food-and-agriculture-organization-of-the-united-nations", + "label": "Food and Agriculture Organization of the United Nations" + }, + { + "slug": "food-science-and-biotechnology", + "label": "Food Science and Biotechnology" + }, + { + "slug": "forensic-anthropology", + "label": "Forensic Anthropology" + }, + { + "slug": "forensic-science-review", + "label": "Forensic Science Review" + }, + { + "slug": "forest-science", + "label": "Forest Science" + }, + { + "slug": "forschungsjournal-soziale-bewegungen-fjsb", + "label": "Forschungsjournal Soziale Bewegungen FJSB(German)" + }, + { + "slug": "forum-qualitative-social-research", + "label": "Forum: Qualitative Social Research (English)" + }, + { + "slug": "forum-qualitative-sozialforschung", + "label": "Forum: Qualitative Sozialforschung (Deutsch)" + }, + { + "slug": "frattura-ed-integrita-strutturale-fracture-and-structural-integrity", + "label": "Frattura ed Integrità Strutturale - Fracture and Structural Integrity" + }, + { + "slug": "free-radical-research", + "label": "Free Radical Research" + }, + { + "slug": "freie-hochschule-stuttgart", + "label": "Freie Hochschule Stuttgart (Deutsch)" + }, + { + "slug": "freie-universitat-berlin-geographische-wissenschaften", + "label": "Freie Universität Berlin - Geographische Wissenschaften (Deutsch)" + }, + { + "slug": "french-politics", + "label": "French Politics" + }, + { + "slug": "french1", + "label": "France (tous les auteurs, numérotation, Français)" + }, + { + "slug": "french2", + "label": "France (auteurs et al., numérotation, Français)" + }, + { + "slug": "french3", + "label": "France (tous les auteurs, auteur-date, Français)" + }, + { + "slug": "french4", + "label": "France (auteurs et al., auteur-date, Français)" + }, + { + "slug": "freshwater-biology", + "label": "Freshwater Biology" + }, + { + "slug": "freshwater-crayfish", + "label": "Freshwater Crayfish" + }, + { + "slug": "freshwater-science", + "label": "Freshwater Science" + }, + { + "slug": "friedrich-schiller-universitat-jena-medizinische-fakultat", + "label": "Friedrich-Schiller-Universität Jena - Medizinische Fakultät (Deutsch)" + }, + { + "slug": "frontiers-in-bioscience", + "label": "Frontiers in Bioscience" + }, + { + "slug": "frontiers-in-ecology-and-the-environment", + "label": "Frontiers in Ecology and the Environment" + }, + { + "slug": "frontiers-in-optics", + "label": "Frontiers in Optics" + }, + { + "slug": "frontiers-in-physics", + "label": "Frontiers in Physics" + }, + { + "slug": "frontiers-medical-journals", + "label": "Frontiers medical journals" + }, + { + "slug": "frontiers-of-biogeography", + "label": "Frontiers of Biogeography" + }, + { + "slug": "frontiers", + "label": "Frontiers journals" + }, + { + "slug": "fundamental-and-applied-limnology", + "label": "Fundamental and Applied Limnology" + }, + { + "slug": "future-medicine", + "label": "Future Medicine journals" + }, + { + "slug": "future-science-group", + "label": "Future Science Group" + }, + { + "slug": "g-giappichelli-editore", + "label": "G. Giappichelli Editore (Italiano)" + }, + { + "slug": "g3", + "label": "G3: Genes, Genomes, Genetics" + }, + { + "slug": "gaceta-sanitaria", + "label": "Gaceta Sanitaria" + }, + { + "slug": "gaia", + "label": "GAIA" + }, + { + "slug": "galatasaray-universitesi-sosyal-bilimler-enstitusu", + "label": "Galatasaray Üniversitesi Sosyal Bilimler Enstitüsü" + }, + { + "slug": "gallia-prehistoire", + "label": "Gallia Préhistoire (Français)" + }, + { + "slug": "gallia", + "label": "Gallia (Français)" + }, + { + "slug": "gastroenterology", + "label": "Gastroenterology" + }, + { + "slug": "gastrointestinal-endoscopy-clinics-of-north-america", + "label": "Gastrointestinal Endoscopy Clinics of North America" + }, + { + "slug": "gastrointestinal-intervention", + "label": "Gastrointestinal Intervention" + }, + { + "slug": "gazeta-medica", + "label": "Gazeta Médica" + }, + { + "slug": "geistes-und-kulturwissenschaften-heilmann", + "label": "Geistes- und Kulturwissenschaften (Heilmann) (Deutsch)" + }, + { + "slug": "gender-and-society", + "label": "Gender & Society" + }, + { + "slug": "gender-zeitschrift-fur-geschlecht-kultur-und-gesellschaft", + "label": "GENDER. Zeitschrift für Geschlecht, Kultur und Gesellschaft (Deutsch)" + }, + { + "slug": "generic-style-rules-for-linguistics", + "label": "Generic Style Rules for Linguistics" + }, + { + "slug": "genes-brain-and-behavior", + "label": "Genes, Brain and Behavior" + }, + { + "slug": "genes-to-cells", + "label": "Genes to Cells" + }, + { + "slug": "geneses", + "label": "Genèses: Sciences sociales et histoire (Français)" + }, + { + "slug": "genetics-and-molecular-biology", + "label": "Genetics and Molecular Biology" + }, + { + "slug": "genetics", + "label": "Genetics" + }, + { + "slug": "genome-biology-and-evolution", + "label": "Genome Biology and Evolution" + }, + { + "slug": "genomics-and-informatics", + "label": "Genomics & Informatics" + }, + { + "slug": "geoarchaeology", + "label": "Geoarchaeology" + }, + { + "slug": "geobiology", + "label": "Geobiology" + }, + { + "slug": "geochemical-perspectives-letters", + "label": "Geochemical Perspectives Letters" + }, + { + "slug": "geochimica-et-cosmochimica-acta", + "label": "Geochimica et Cosmochimica Acta" + }, + { + "slug": "geochronometria", + "label": "Geochronometria" + }, + { + "slug": "geografia-fisica-e-dinamica-quaternaria", + "label": "Geografia Fisica e Dinamica Quaternaria" + }, + { + "slug": "geografie-sbornik-cgs", + "label": "Geografie Sborník ČGS" + }, + { + "slug": "geographical-analysis", + "label": "Geographical Analysis" + }, + { + "slug": "geographie-et-cultures", + "label": "Géographie et cultures (Français)" + }, + { + "slug": "geographische-zeitschrift", + "label": "Geographische Zeitschrift" + }, + { + "slug": "geological-magazine", + "label": "Geological Magazine" + }, + { + "slug": "geophysical-journal-international", + "label": "Geophysical Journal International" + }, + { + "slug": "geophysics", + "label": "Geophysics" + }, + { + "slug": "geopolitics", + "label": "Geopolitics" + }, + { + "slug": "georg-august-universitat-gottingen-institut-fur-ethnologie-und-ethnologische-sammlung", + "label": "Georg-August-Universität Göttingen - Institut für Ethnologie und Ethnologische Sammlung (Deutsch)" + }, + { + "slug": "geriatrics-and-gerontology-international", + "label": "Geriatrics & Gerontology International" + }, + { + "slug": "geriatrie-et-psychologie-neuropsychiatrie-du-vieillissement", + "label": "Gériatrie et Psychologie Neuropsychiatrie du Vieillissement" + }, + { + "slug": "german-council-of-economic-experts", + "label": "German Council of Economic Experts" + }, + { + "slug": "german-journal-of-agricultural-economics", + "label": "German Journal of Agricultural Economics" + }, + { + "slug": "german-yearbook-of-international-law", + "label": "German Yearbook of International Law" + }, + { + "slug": "geschichte-und-gesellschaft", + "label": "Geschichte und Gesellschaft" + }, + { + "slug": "gesellschaft-fur-popularmusikforschung", + "label": "Gesellschaft fur Popularmusikforschung (Deutsch)" + }, + { + "slug": "gewerblicher-rechtsschutz-und-urheberrecht", + "label": "Gewerblicher Rechtsschutz und Urheberrecht (Deutsch)" + }, + { + "slug": "gigascience", + "label": "GigaScience" + }, + { + "slug": "global-ecology-and-biogeography", + "label": "Global Ecology and Biogeography" + }, + { + "slug": "glossa", + "label": "Glossa" + }, + { + "slug": "gnosis-journal-of-gnostic-studies", + "label": "Gnosis: Journal of Gnostic Studies" + }, + { + "slug": "gost-r-7-0-5-2008-numeric-alphabetical", + "label": "Russian GOST R 7.0.5-2008 (numeric, sorted alphabetically, Ру́сский)" + }, + { + "slug": "gost-r-7-0-5-2008-numeric", + "label": "Russian GOST R 7.0.5-2008 (numeric)" + }, + { + "slug": "gost-r-7-0-5-2008", + "label": "Russian GOST R 7.0.5-2008 (Ру́сский)" + }, + { + "slug": "government-and-opposition", + "label": "Government and Opposition" + }, + { + "slug": "grasas-y-aceites", + "label": "Grasas y Aceites" + }, + { + "slug": "griffith-college-harvard", + "label": "Griffith College - Harvard" + }, + { + "slug": "groundwater", + "label": "Groundwater" + }, + { + "slug": "groupe-danthropologie-et-darcheologie-funeraire", + "label": "Groupe d'anthropologie et d'archéologie funéraire (Français)" + }, + { + "slug": "guide-des-citations-references-et-abreviations-juridiques", + "label": "Guide des citations, références et abréviations juridiques 6e édition (Français)" + }, + { + "slug": "guide-pour-la-redaction-et-la-presentation-des-theses-a-lusage-des-doctorants", + "label": "Guide pour la rédaction et la présentation des thèses à l'usage des doctorants (Français)" + }, + { + "slug": "haaga-helia-university-of-applied-sciences-harvard", + "label": "Haaga-Helia ammattikorkeakoulu - Harvard" + }, + { + "slug": "haematologica", + "label": "Haematologica" + }, + { + "slug": "haemophilia", + "label": "Haemophilia" + }, + { + "slug": "haffner-style-manual", + "label": "Haffner Style Manual" + }, + { + "slug": "hainan-medical-university-journal-publisher", + "label": "Hainan Medical University Journal Publisher" + }, + { + "slug": "hamburg-school-of-food-science", + "label": "Hamburg School of Food Science (diploma, Deutsch)" + }, + { + "slug": "hand", + "label": "HAND" + }, + { + "slug": "handbook-of-clinical-neurology", + "label": "Handbook of Clinical Neurology" + }, + { + "slug": "harvard-anglia-ruskin-university", + "label": "Anglia Ruskin University - Harvard" + }, + { + "slug": "harvard-bournemouth-university", + "label": "Bournemouth University - Harvard" + }, + { + "slug": "harvard-cape-peninsula-university-of-technology", + "label": "Cape Peninsula University of Technology - Harvard" + }, + { + "slug": "harvard-cite-them-right-10th-edition", + "label": "Cite Them Right 10th edition - Harvard" + }, + { + "slug": "harvard-cite-them-right-11th-edition", + "label": "Cite Them Right 11th edition - Harvard" + }, + { + "slug": "harvard-cite-them-right-no-et-al", + "label": "Cite Them Right 12th edition - Harvard (no \"et al.\")" + }, + { + "slug": "harvard-cite-them-right", + "label": "Cite Them Right 12th edition - Harvard" + }, + { + "slug": "harvard-coventry-university", + "label": "Coventry University - Harvard" + }, + { + "slug": "harvard-cranfield-university", + "label": "Cranfield University - Harvard" + }, + { + "slug": "harvard-deakin-university", + "label": "Deakin University - Harvard" + }, + { + "slug": "harvard-dundalk-institute-of-technology", + "label": "Dundalk Institute of Technology - Harvard" + }, + { + "slug": "harvard-durham-university-business-school", + "label": "Durham University Business School - Harvard" + }, + { + "slug": "harvard-edge-hill-university", + "label": "Edge Hill University - Harvard" + }, + { + "slug": "harvard-european-archaeology", + "label": "European Archaeology - Harvard" + }, + { + "slug": "harvard-fachhochschule-salzburg", + "label": "Fachhochschule Salzburg - Harvard" + }, + { + "slug": "harvard-falmouth-university", + "label": "Falmouth University - Harvard" + }, + { + "slug": "harvard-gesellschaft-fur-bildung-und-forschung-in-europa", + "label": "Gesellschaft für Bildung und Forschung in Europa - Harvard (Deutsch)" + }, + { + "slug": "harvard-imperial-college-london", + "label": "Imperial College London - Harvard" + }, + { + "slug": "harvard-institut-fur-praxisforschung-de", + "label": "Institut für Praxisforschung - Harvard (Bahr & Frackmann) (Deutsch)" + }, + { + "slug": "harvard-kings-college-london", + "label": "King's College London - Harvard" + }, + { + "slug": "harvard-leeds-beckett-university", + "label": "Leeds Beckett University - Harvard" + }, + { + "slug": "harvard-leeds-metropolitan-university", + "label": "Leeds Metropolitan University - Harvard" + }, + { + "slug": "harvard-limerick", + "label": "University of Limerick (Cite it Right) - Harvard" + }, + { + "slug": "harvard-london-south-bank-university", + "label": "London South Bank University - Harvard" + }, + { + "slug": "harvard-manchester-business-school", + "label": "Manchester Business School - Harvard" + }, + { + "slug": "harvard-manchester-metropolitan-university", + "label": "Manchester Metropolitan University - Harvard" + }, + { + "slug": "harvard-melbourne-polytechnic", + "label": "Melbourne Polytechnic - Harvard" + }, + { + "slug": "harvard-newcastle-university", + "label": "Newcastle University - Harvard" + }, + { + "slug": "harvard-north-west-university", + "label": "North-West University - Harvard" + }, + { + "slug": "harvard-pontificia-universidad-catolica-del-ecuador", + "label": "Pontificia Universidad Católica del Ecuador (Español) - Harvard" + }, + { + "slug": "harvard-robert-gordon-university", + "label": "Robert Gordon University - Harvard" + }, + { + "slug": "harvard-staffordshire-university", + "label": "Staffordshire University - Harvard" + }, + { + "slug": "harvard-stellenbosch-university", + "label": "Stellenbosch University - Harvard" + }, + { + "slug": "harvard-swinburne-university-of-technology", + "label": "Swinburne University of Technology - Harvard" + }, + { + "slug": "harvard-the-university-of-northampton", + "label": "The University of Northampton - Harvard" + }, + { + "slug": "harvard-the-university-of-sheffield-school-of-east-asian-studies", + "label": "The University of Sheffield - School of East Asian Studies - Harvard" + }, + { + "slug": "harvard-the-university-of-sheffield-town-and-regional-planning", + "label": "The University of Sheffield - Town and Regional Planning - Harvard" + }, + { + "slug": "harvard-theologisches-seminar-adelshofen", + "label": "Theologisches Seminar Adelshofen - Harvard (Deutsch)" + }, + { + "slug": "harvard-universiti-teknologi-malaysia", + "label": "Universiti Teknologi Malaysia - Harvard" + }, + { + "slug": "harvard-universiti-tunku-abdul-rahman", + "label": "Universiti Tunku Abdul Rahman - Harvard" + }, + { + "slug": "harvard-university-for-the-creative-arts", + "label": "University for the Creative Arts - Harvard" + }, + { + "slug": "harvard-university-of-abertay-dundee", + "label": "University of Abertay Dundee - Harvard" + }, + { + "slug": "harvard-university-of-bath", + "label": "University of Bath - Harvard" + }, + { + "slug": "harvard-university-of-birmingham", + "label": "University of Birmingham - Harvard" + }, + { + "slug": "harvard-university-of-brighton-school-of-environment-and-technology", + "label": "University of Brighton School of Environment & Technology - Harvard" + }, + { + "slug": "harvard-university-of-cape-town", + "label": "University of Cape Town - Harvard" + }, + { + "slug": "harvard-university-of-exeter-geography", + "label": "University of Exeter - Geography - Harvard" + }, + { + "slug": "harvard-university-of-greenwich", + "label": "University of Greenwich - Harvard" + }, + { + "slug": "harvard-university-of-kent", + "label": "University of Kent - Harvard" + }, + { + "slug": "harvard-university-of-leeds", + "label": "University of Leeds - Harvard" + }, + { + "slug": "harvard-university-of-technology-sydney", + "label": "University of Technology Sydney - Harvard" + }, + { + "slug": "harvard-university-of-the-west-of-england", + "label": "University of the West of England (Bristol) - Harvard" + }, + { + "slug": "harvard-university-of-the-west-of-scotland", + "label": "University of the West of Scotland - Harvard" + }, + { + "slug": "harvard-university-of-westminster", + "label": "University of Westminster - Harvard" + }, + { + "slug": "harvard-university-of-wolverhampton", + "label": "University of Wolverhampton - Harvard" + }, + { + "slug": "harvard-university-of-worcester", + "label": "University of Worcester - Harvard" + }, + { + "slug": "harvard-xi-an-jiaotong-liverpool-university", + "label": "Xi'an Jiaotong-Liverpool University (XJTLU) - Harvard" + }, + { + "slug": "harvard-york-st-john-university", + "label": "York St John University - Harvard (pre September 2019 entry)" + }, + { + "slug": "haute-ecole-de-gestion-de-geneve-iso-690", + "label": "Haute école de gestion de Genève (ISO 690)" + }, + { + "slug": "haute-ecole-pedagogique-fribourg", + "label": "Haute Ecole pédagogique Fribourg (Français)" + }, + { + "slug": "hawaii-international-conference-on-system-sciences-proceedings", + "label": "Hawaii International Conference on System Sciences Proceedings" + }, + { + "slug": "health-and-human-rights-journal", + "label": "Health and Human Rights Journal" + }, + { + "slug": "health-and-social-care-in-the-community", + "label": "Health & Social Care in the Community" + }, + { + "slug": "health-economics-policy-and-law", + "label": "Health Economics, Policy and Law" + }, + { + "slug": "health-economics", + "label": "Health Economics" + }, + { + "slug": "health-education-england-harvard", + "label": "Health Education England - Harvard" + }, + { + "slug": "health-education-research", + "label": "Health Education Research" + }, + { + "slug": "health-physics", + "label": "Health Physics" + }, + { + "slug": "health-policy-and-planning", + "label": "Health Policy and Planning" + }, + { + "slug": "health-reform-observer-observatoire-des-reformes-de-sante", + "label": "Health Reform Observer - Observatoire des Réformes de Santé" + }, + { + "slug": "health-sports-and-rehabilitation-medicine", + "label": "Health, Sports & Rehabilitation Medicine" + }, + { + "slug": "heart-failure-clinics", + "label": "Heart Failure Clinics" + }, + { + "slug": "heart-rhythm", + "label": "Heart Rhythm" + }, + { + "slug": "heidelberg-university-faculty-of-medicine", + "label": "Heidelberg University - Faculty of Medicine (Universität Heidelberg - Medizinische Fakultät Heidelberg)" + }, + { + "slug": "heiliger-dienst", + "label": "Heiliger Dienst (Deutsch)" + }, + { + "slug": "helvetica-chimica-acta", + "label": "Helvetica Chimica Acta" + }, + { + "slug": "hematology-oncology-clinics-of-north-america", + "label": "Hematology/Oncology Clinics of North America" + }, + { + "slug": "hemijska-industrija", + "label": "Hemijska industrija" + }, + { + "slug": "henoch", + "label": "Henoch" + }, + { + "slug": "hepatology", + "label": "Hepatology" + }, + { + "slug": "heredity", + "label": "Heredity" + }, + { + "slug": "herpetologica", + "label": "Herpetologica" + }, + { + "slug": "hiob-ludolf-centre-for-ethiopian-studies-long-names", + "label": "Hiob Ludolf Centre for Ethiopian Studies (long names)" + }, + { + "slug": "hiob-ludolf-centre-for-ethiopian-studies-with-url-doi", + "label": "Hiob Ludolf Centre for Ethiopian Studies (with URL/DOI)" + }, + { + "slug": "hiob-ludolf-centre-for-ethiopian-studies", + "label": "Hiob Ludolf Centre for Ethiopian Studies" + }, + { + "slug": "hipertension-y-riesgo-vascular", + "label": "Hipertensión y Riesgo Vascular (Español)" + }, + { + "slug": "histoire-at-politique", + "label": "Histoire@Politique. Politique, culture, société (Français)" + }, + { + "slug": "histoire-et-mesure", + "label": "Histoire & Mesure (Français)" + }, + { + "slug": "histopathology", + "label": "Histopathology" + }, + { + "slug": "historia-scribere", + "label": "historia-scribere (Deutsch)" + }, + { + "slug": "historical-materialism", + "label": "Historical Materialism" + }, + { + "slug": "historical-social-research", + "label": "Historical Social Research" + }, + { + "slug": "historio-plus", + "label": "historioPLUS (Deutsch - Österreich)" + }, + { + "slug": "history-and-theory", + "label": "History and Theory" + }, + { + "slug": "history-australia", + "label": "History Australia" + }, + { + "slug": "history-of-the-human-sciences", + "label": "History of the Human Sciences" + }, + { + "slug": "hochschule-bonn-rhein-sieg", + "label": "Hochschule Bonn-Rhein-Sieg (Harvard, Deutsch)" + }, + { + "slug": "hochschule-fur-soziale-arbeit-fhnw", + "label": "Hochschule für Soziale Arbeit FHNW (Deutsch - Schweiz)" + }, + { + "slug": "hochschule-fur-wirtschaft-und-recht-berlin", + "label": "Hochschule für Wirtschaft und Recht Berlin (Deutsch)" + }, + { + "slug": "hochschule-hannover-soziale-arbeit", + "label": "Hochschule Hannover - Soziale Arbeit (Deutsch)" + }, + { + "slug": "hochschule-munchen-fakultat-fur-angewandte-sozialwissenschaften", + "label": "Hochschule München - Fakultät für Angewandte Sozialwissenschaften (Deutsch)" + }, + { + "slug": "hochschule-osnabruck-fakultat-agrarwissenschaften-und-landschaftsarchitektur", + "label": "Hochschule Osnabrück - Fakultät Agrarwissenschaften und Landschaftsarchitektur (Deutsch)" + }, + { + "slug": "hochschule-pforzheim-fakultat-fur-wirtschaft-und-recht", + "label": "Hochschule Pforzheim - Fakultät für Wirtschaft und Recht (Deutsch)" + }, + { + "slug": "hong-kong-journal-of-radiology", + "label": "Hong Kong Journal of Radiology" + }, + { + "slug": "hospital-a-domicilio", + "label": "Hospital a Domicilio" + }, + { + "slug": "housing-studies", + "label": "Housing Studies" + }, + { + "slug": "howard-hughes-medical-institute", + "label": "Howard Hughes Medical Institute" + }, + { + "slug": "hpb", + "label": "HPB" + }, + { + "slug": "human-brain-mapping", + "label": "Human Brain Mapping" + }, + { + "slug": "human-ecology", + "label": "Human Ecology" + }, + { + "slug": "human-molecular-genetics", + "label": "Human Molecular Genetics" + }, + { + "slug": "human-mutation", + "label": "Human Mutation" + }, + { + "slug": "human-reproduction-update", + "label": "Human Reproduction Update" + }, + { + "slug": "human-reproduction", + "label": "Human Reproduction" + }, + { + "slug": "human-resource-management-journal", + "label": "Human Resource Management Journal" + }, + { + "slug": "human-rights-law-review", + "label": "Human Rights Law Review" + }, + { + "slug": "human-wildlife-interactions", + "label": "Human-Wildlife Interactions" + }, + { + "slug": "humanistica-lovaniensia-journal-of-neo-latin-studies", + "label": "Humanistica Lovaniensia. Journal of Neo-Latin Studies" + }, + { + "slug": "humboldt-state-university-environmental-resources-engineering", + "label": "Humboldt State University - Environmental Resources Engineering" + }, + { + "slug": "hydrobiologia", + "label": "Hydrobiologia" + }, + { + "slug": "hydrological-processes", + "label": "Hydrological Processes" + }, + { + "slug": "hydrological-sciences-journal", + "label": "Hydrological Sciences Journal" + }, + { + "slug": "hypertension-research", + "label": "Hypertension Research" + }, + { + "slug": "hypotheses-in-the-life-sciences", + "label": "Hypotheses in the Life Sciences" + }, + { + "slug": "hystrix-the-italian-journal-of-mammalogy", + "label": "Hystrix, the Italian Journal of Mammalogy" + }, + { + "slug": "iainutuban-tarbiyah", + "label": "IAINU Tuban - Fakultas Tarbiyah (Bahasa Indonesia)" + }, + { + "slug": "iawa-journal", + "label": "IAWA Journal" + }, + { + "slug": "ib-tauris-note", + "label": "I.B. Tauris (note)" + }, + { + "slug": "ibis", + "label": "Ibis" + }, + { + "slug": "ices-journal-of-marine-science", + "label": "ICES Journal of Marine Science" + }, + { + "slug": "idojaras-quarterly-journal-of-the-hungarian-meteorological-service", + "label": "Időjárás - Quarterly Journal of the Hungarian Meteorological Service" + }, + { + "slug": "ie-comunicaciones", + "label": "IE Comunicaciones" + }, + { + "slug": "ieee-transactions-on-medical-imaging", + "label": "IEEE Transactions on Medical Imaging" + }, + { + "slug": "ieee-with-url", + "label": "IEEE (with URL)" + }, + { + "slug": "ieee", + "label": "IEEE" + }, + { + "slug": "iforest", + "label": "iForest" + }, + { + "slug": "igaku-toshokan", + "label": "Igaku Toshokan (日本語)" + }, + { + "slug": "iica-catie", + "label": "IICA-CATIE (Español)" + }, + { + "slug": "ilahiyat-studies", + "label": "Ilahiyat Studies (full note)" + }, + { + "slug": "im-gesprach", + "label": "Im Gespräch - Hefte der Martin Buber-Gesellschaft (Deutsch)" + }, + { + "slug": "incontext-studies-in-translation-and-interculturalism", + "label": "INContext: Studies in Translation and Interculturalism" + }, + { + "slug": "indian-dermatology-online-journal", + "label": "Indian Dermatology Online Journal" + }, + { + "slug": "indian-journal-of-medical-research", + "label": "Indian Journal of Medical Research" + }, + { + "slug": "indian-journal-of-orthopaedics", + "label": "Indian Journal of Orthopaedics" + }, + { + "slug": "indian-journal-of-physics", + "label": "Indian Journal of Physics" + }, + { + "slug": "indian-journal-of-traditional-knowledge", + "label": "Indian Journal of Traditional Knowledge" + }, + { + "slug": "indiana", + "label": "INDIANA" + }, + { + "slug": "indoor-air", + "label": "Indoor Air" + }, + { + "slug": "industrial-relations", + "label": "Industrial Relations" + }, + { + "slug": "infectio", + "label": "Infectio (Español)" + }, + { + "slug": "infectious-disease-clinics-of-north-america", + "label": "Infectious Disease Clinics of North America" + }, + { + "slug": "inflammatory-bowel-diseases", + "label": "Inflammatory Bowel Diseases" + }, + { + "slug": "influenza-and-other-respiratory-viruses", + "label": "Influenza and Other Respiratory Viruses" + }, + { + "slug": "infoclio-de-kurzbelege", + "label": "infoclio.ch (Kurzbelege, Deutsch - Schweiz)" + }, + { + "slug": "infoclio-de", + "label": "infoclio.ch (Deutsch - Schweiz)" + }, + { + "slug": "infoclio-fr-nocaps", + "label": "infoclio.ch (sans majuscules, Français)" + }, + { + "slug": "infoclio-fr-smallcaps", + "label": "infoclio.ch (petites majuscules, Français)" + }, + { + "slug": "infomin", + "label": "Infomin" + }, + { + "slug": "informal-logic", + "label": "Informal Logic" + }, + { + "slug": "ingenieria-agricola", + "label": "Ingeniería Agrícola (Español)" + }, + { + "slug": "innovations-therapeutiques-en-oncologie", + "label": "Innovations & Thérapeutiques en Oncologie" + }, + { + "slug": "instap-academic-press", + "label": "INSTAP Academic Press" + }, + { + "slug": "institut-francais-darcheologie-orientale-arab-studies", + "label": "Institut français d'archéologie orientale - Arab Studies (English)" + }, + { + "slug": "institut-francais-darcheologie-orientale-en", + "label": "Institut français d'archéologie orientale - Egyptology (English)" + }, + { + "slug": "institut-francais-darcheologie-orientale-etudes-arabes", + "label": "Institut français d'archéologie orientale - études arabes (Français)" + }, + { + "slug": "institut-francais-darcheologie-orientale", + "label": "Institut français d'archéologie orientale - archéologie et égyptologie (Français)" + }, + { + "slug": "institut-national-de-la-recherche-scientifique-sciences-sociales", + "label": "Institut national de la recherche scientifique - Sciences sociales (author-date, Français)" + }, + { + "slug": "institut-national-de-recherches-archeologiques-preventives", + "label": "Institut national de recherches archéologiques préventives (Français)" + }, + { + "slug": "institut-national-de-sante-publique-du-quebec-napp", + "label": "Institut national de santé publique du Québec - NAPP (Français - Canada)" + }, + { + "slug": "institut-national-de-sante-publique-du-quebec-topo", + "label": "Institut national de santé publique du Québec - TOPO (Français - Canada)" + }, + { + "slug": "institut-pertanian-bogor", + "label": "Institut Pertanian Bogor: Pedoman Penulisan Karya Ilmiah Edisi ke-3 (Bahasa Indonesia)" + }, + { + "slug": "institut-teknologi-bandung-sekolah-pascasarjana", + "label": "Institut Teknologi Bandung - Sekolah Pascasarjana" + }, + { + "slug": "institute-for-operations-research-and-the-management-sciences", + "label": "Institute for Operations Research and the Management Sciences" + }, + { + "slug": "institute-of-mathematical-statistics", + "label": "Institute of Mathematical Statistics journals" + }, + { + "slug": "institute-of-mathematics-and-its-applications", + "label": "Institute of Mathematics and its Applications" + }, + { + "slug": "institute-of-physics-harvard", + "label": "Institute of Physics - Harvard" + }, + { + "slug": "institute-of-physics-numeric", + "label": "Institute of Physics (numeric)" + }, + { + "slug": "instituto-brasileiro-de-informacao-em-ciencia-e-tecnologia-abnt-initials", + "label": "Instituto Brasileiro de Informação em Ciência e Tecnologia - ABNT (autoria abreviada)" + }, + { + "slug": "instituto-brasileiro-de-informacao-em-ciencia-e-tecnologia-abnt", + "label": "Instituto Brasileiro de Informação em Ciência e Tecnologia - ABNT (autoria completa)" + }, + { + "slug": "instituto-de-investigaciones-sobre-la-universidad-y-la-educacion-moderno", + "label": "Instituto de Investigaciones sobre la Universidad y la Educación - Moderno (autor-fecha, Español)" + }, + { + "slug": "instituto-de-pesquisas-energeticas-e-nucleares", + "label": "Instituto de Pesquisas Energéticas e Nucleares (Português - Brasil)" + }, + { + "slug": "instituto-de-pesquisas-tecnologicas", + "label": "Instituto de Pesquisas Tecnológicas (Português - Brasil)" + }, + { + "slug": "instituto-superior-de-teologia-de-las-islas-canarias", + "label": "Instituto Superior de Teología de las Islas Canarias (Español)" + }, + { + "slug": "integrated-science-publishing-journals", + "label": "Integrated Science Publishing journals" + }, + { + "slug": "integrative-and-comparative-biology", + "label": "Integrative & Comparative Biology" + }, + { + "slug": "intellect-newgen-books", + "label": "Intellect Newgen Books" + }, + { + "slug": "inter-research-science-center", + "label": "Inter-Research Science Center" + }, + { + "slug": "inter-ro", + "label": "INTER: Romanian Review for Theological and Religious Studies" + }, + { + "slug": "interaction-design-and-architectures", + "label": "Interaction Design & Architecture(s)" + }, + { + "slug": "interactive-cardiovascular-and-thoracic-surgery", + "label": "Interactive CardioVascular and Thoracic Surgery" + }, + { + "slug": "interdisziplinare-anthropologie", + "label": "Interdisziplinäre Anthropologie (Deutsch)" + }, + { + "slug": "interdisziplinare-zeitschrift-fur-technologie-und-lernen", + "label": "Interdisziplinäre Zeitschrift für Technologie und Lernen (Deutsch)" + }, + { + "slug": "interkulturelle-germanistik-gottingen", + "label": "Interkulturelle Germanistik Göttingen (Deutsch)" + }, + { + "slug": "international-atomic-energy-agency", + "label": "International Atomic Energy Agency" + }, + { + "slug": "international-biodeterioration-and-biodegradation", + "label": "International Biodeterioration & Biodegradation" + }, + { + "slug": "international-brazilian-journal-of-urology", + "label": "International Brazilian Journal Of Urology" + }, + { + "slug": "international-conference-on-information-systems-development", + "label": "International Conference on Information Systems Development" + }, + { + "slug": "international-development-policy", + "label": "International Development Policy" + }, + { + "slug": "international-energy-agency-organisation-for-economic-co-operation-and-development", + "label": "International Energy Agency - Organisation for Economic Co-operation and Development" + }, + { + "slug": "international-islamic-university-malaysia-ahmad-ibrahim-kulliyyah-of-laws", + "label": "International Islamic University Malaysia - Ahmad Ibrahim Kulliyyah of Laws" + }, + { + "slug": "international-journal-for-numerical-methods-in-biomedical-engineering", + "label": "International Journal for Numerical Methods in Biomedical Engineering" + }, + { + "slug": "international-journal-of-audiology", + "label": "International Journal of Audiology" + }, + { + "slug": "international-journal-of-automotive-technology", + "label": "International Journal of Automotive Technology" + }, + { + "slug": "international-journal-of-cancer", + "label": "International Journal of Cancer" + }, + { + "slug": "international-journal-of-circuit-theory-and-applications", + "label": "International Journal of Circuit Theory and Applications" + }, + { + "slug": "international-journal-of-climatology", + "label": "International Journal of Climatology" + }, + { + "slug": "international-journal-of-clinical-research", + "label": "International Journal of Clinical Research" + }, + { + "slug": "international-journal-of-cosmetic-science", + "label": "International Journal of Cosmetic Science" + }, + { + "slug": "international-journal-of-electrochemical-science", + "label": "International Journal of Electrochemical Science" + }, + { + "slug": "international-journal-of-electronic-commerce", + "label": "International Journal of Electronic Commerce" + }, + { + "slug": "international-journal-of-epidemiology", + "label": "International Journal of Epidemiology" + }, + { + "slug": "international-journal-of-exercise-science", + "label": "International Journal of Exercise Science" + }, + { + "slug": "international-journal-of-food-science-and-technology", + "label": "International Journal of Food Science & Technology" + }, + { + "slug": "international-journal-of-geriatric-psychiatry", + "label": "International Journal of Geriatric Psychiatry" + }, + { + "slug": "international-journal-of-humanoid-robotics", + "label": "International Journal of Humanoid Robotics" + }, + { + "slug": "international-journal-of-language-and-communication-disorders", + "label": "International Journal of Language & Communication Disorders" + }, + { + "slug": "international-journal-of-learner-corpus-research", + "label": "International Journal of Learner Corpus Research" + }, + { + "slug": "international-journal-of-lexicography", + "label": "International Journal of Lexicography" + }, + { + "slug": "international-journal-of-management-reviews", + "label": "International Journal of Management Reviews" + }, + { + "slug": "international-journal-of-nuclear-security", + "label": "International Journal of Nuclear Security" + }, + { + "slug": "international-journal-of-obstetric-anesthesia", + "label": "International Journal of Obstetric Anesthesia" + }, + { + "slug": "international-journal-of-occupational-medicine-and-environmental-health", + "label": "International Journal of Occupational Medicine and Environmental Health" + }, + { + "slug": "international-journal-of-oral-and-maxillofacial-surgery", + "label": "International Journal of Oral and Maxillofacial Surgery" + }, + { + "slug": "international-journal-of-osteoarchaeology", + "label": "International Journal of Osteoarchaeology" + }, + { + "slug": "international-journal-of-plant-sciences", + "label": "International Journal of Plant Sciences" + }, + { + "slug": "international-journal-of-polymer-analysis-and-characterization", + "label": "International Journal of Polymer Analysis and Characterization" + }, + { + "slug": "international-journal-of-polymeric-materials-and-polymeric-biomaterials", + "label": "International Journal of Polymeric Materials and Polymeric Biomaterials" + }, + { + "slug": "international-journal-of-population-data-science", + "label": "International Journal of Population Data Science" + }, + { + "slug": "international-journal-of-quantum-chemistry", + "label": "International Journal of Quantum Chemistry" + }, + { + "slug": "international-journal-of-radiation-oncology-biology-physics", + "label": "International Journal of Radiation Oncology, Biology, Physics" + }, + { + "slug": "international-journal-of-research-in-exercise-physiology", + "label": "International Journal of Research in Exercise Physiology" + }, + { + "slug": "international-journal-of-simulation-modelling", + "label": "International Journal of Simulation Modelling" + }, + { + "slug": "international-journal-of-spatial-data-infrastructures-research", + "label": "International Journal of Spatial Data Infrastructures Research" + }, + { + "slug": "international-journal-of-sports-medicine", + "label": "International Journal of Sport Medicine" + }, + { + "slug": "international-journal-of-urban-and-regional-research", + "label": "International Journal of Urban and Regional Research" + }, + { + "slug": "international-journal-of-wildland-fire", + "label": "International Journal of Wildland Fire" + }, + { + "slug": "international-microbiology", + "label": "International Microbiology" + }, + { + "slug": "international-organization", + "label": "International Organization" + }, + { + "slug": "international-pig-veterinary-society-congress-proceedings", + "label": "International Pig Veterinary Society Congress Proceedings" + }, + { + "slug": "international-review-of-the-red-cross", + "label": "International Review of the Red Cross" + }, + { + "slug": "international-security", + "label": "International Security" + }, + { + "slug": "international-studies-association", + "label": "International Studies Association" + }, + { + "slug": "international-union-of-crystallography", + "label": "International Union of Crystallography journals" + }, + { + "slug": "international-union-of-forest-research-organizations-headquarters", + "label": "International Union of Forest Research Organizations - Headquarters" + }, + { + "slug": "internet-archaeology", + "label": "Internet Archaeology" + }, + { + "slug": "interpreting", + "label": "Interpreting" + }, + { + "slug": "inventaire-general-du-patrimoine-culturel-iso-690-full-note-with-ibid", + "label": "Inventaire général du patrimoine culturel - ISO-690 (full note, with Ibid., Français)" + }, + { + "slug": "inventaire-general-du-patrimoine-culturel-iso-690-full-note", + "label": "Inventaire général du patrimoine culturel - ISO-690 (full note, Français)" + }, + { + "slug": "inventaire-general-du-patrimoine-culturel-iso-690-note", + "label": "Inventaire général du patrimoine culturel - ISO-690 (note, Français)" + }, + { + "slug": "invertebrate-biology", + "label": "Invertebrate Biology" + }, + { + "slug": "investigative-radiology", + "label": "Investigative Radiology" + }, + { + "slug": "invisu", + "label": "InVisu" + }, + { + "slug": "ios-press-books", + "label": "IOS Press (books)" + }, + { + "slug": "ipag-business-school-apa", + "label": "IPAG Business School - APA" + }, + { + "slug": "iran-manual-of-style", + "label": "Iran Manual of Style - شیوه‌نامه ایران (فارسی)" + }, + { + "slug": "iranian-journal-of-basic-medical-sciences", + "label": "Iranian Journal of Basic Medical Sciences" + }, + { + "slug": "iranian-journal-of-pharmaceutical-research", + "label": "Iranian Journal of Pharmaceutical Research" + }, + { + "slug": "irish-historical-studies", + "label": "Irish Historical Studies" + }, + { + "slug": "isabella-stewart-gardner-museum", + "label": "Isabella Stewart Gardner Museum" + }, + { + "slug": "isara-iso-690", + "label": "Isara - ISO-690 (auteur-date, français)" + }, + { + "slug": "isnad-dipnotlu", + "label": "İSNAD Atıf Sistemi 2. Edisyon (dipnotlu)" + }, + { + "slug": "isnad-metinici", + "label": "İSNAD Atıf Sistemi 2. Edisyon (metiniçi)" + }, + { + "slug": "isnad", + "label": "İSNAD Atıf Sistemi 1. Edisyon (dipnotlu)" + }, + { + "slug": "iso690-author-date-cs", + "label": "ISO-690 (author-date, Čeština)" + }, + { + "slug": "iso690-author-date-de", + "label": "ISO-690 (author-date, Deutsch)" + }, + { + "slug": "iso690-author-date-en", + "label": "ISO-690 (author-date, English)" + }, + { + "slug": "iso690-author-date-es", + "label": "ISO-690 (author-date, Español)" + }, + { + "slug": "iso690-author-date-fr-no-abstract", + "label": "ISO-690 (author-date, no abstract, Français)" + }, + { + "slug": "iso690-author-date-fr", + "label": "ISO-690 (author-date, Français)" + }, + { + "slug": "iso690-author-date-pt-br", + "label": "ISO-690 (author-date, Português - Brasil)" + }, + { + "slug": "iso690-author-date-sk", + "label": "ISO-690 (author-date, Slovenčina)" + }, + { + "slug": "iso690-full-note-cs", + "label": "ISO-690 (full note, Čeština)" + }, + { + "slug": "iso690-full-note-sk", + "label": "ISO-690 (full note, Slovenčina)" + }, + { + "slug": "iso690-full-note-with-ibid-ro", + "label": "ISO-690 (full note, with Ibid., Română)" + }, + { + "slug": "iso690-note-cs", + "label": "ISO-690 (note, without bibliography, Čeština)" + }, + { + "slug": "iso690-note-fr", + "label": "ISO-690 (note, no abstract, Français)" + }, + { + "slug": "iso690-numeric-brackets-cs", + "label": "ISO-690 (numeric, brackets, Čeština)" + }, + { + "slug": "iso690-numeric-cs", + "label": "ISO-690 (numeric, parentheses, Čeština)" + }, + { + "slug": "iso690-numeric-en", + "label": "ISO-690 (numeric, English)" + }, + { + "slug": "iso690-numeric-fr", + "label": "ISO-690 (numeric, Français)" + }, + { + "slug": "iso690-numeric-lt", + "label": "ISO-690 (numeric, Lietuvių kalba)" + }, + { + "slug": "iso690-numeric-sk", + "label": "ISO-690 (numeric, Slovenčina)" + }, + { + "slug": "israel-medical-association-journal", + "label": "Israel Medical Association Journal" + }, + { + "slug": "istanbul-medical-journal", + "label": "İstanbul Medical Journal" + }, + { + "slug": "istanbul-universitesi-sosyal-bilimler-enstitusu", + "label": "İstanbul Üniversitesi Sosyal Bilimler Enstitüsü (Türkçe)" + }, + { + "slug": "italian-journal-of-agronomy", + "label": "Italian Journal of Agronomy" + }, + { + "slug": "italus-hortus", + "label": "Italus Hortus" + }, + { + "slug": "ithaque", + "label": "Ithaque (Français - Canada)" + }, + { + "slug": "iubmb-life", + "label": "IUBMB Life" + }, + { + "slug": "ius-ecclesiae", + "label": "Ius Ecclesiae" + }, + { + "slug": "izmir-katip-celebi-universitesi-sosyal-bilimler-enstitusu", + "label": "İzmir Katip Çelebi Üniversitesi - Sosyal Bilimler Enstitüsü (Türkçe)" + }, + { + "slug": "jacc-cardiovascular-imaging", + "label": "JACC: Cardiovascular Imaging" + }, + { + "slug": "jacc-cardiovascular-interventions", + "label": "JACC: Cardiovascular Interventions" + }, + { + "slug": "jahrbuch-der-osterreichischen-byzantinischen-gesellschaft", + "label": "Jahrbuch der Österreichischen Byzantinischen Gesellschaft" + }, + { + "slug": "jahrbuch-fur-evangelikale-theologie", + "label": "Jahrbuch für evangelikale Theologie (Deutsch)" + }, + { + "slug": "japanese-journal-of-applied-physics", + "label": "Japanese Journal of Applied Physics" + }, + { + "slug": "javnost-the-public", + "label": "Javnost - The Public" + }, + { + "slug": "jcom-journal-of-science-communication", + "label": "JCOM: Journal of Science Communication" + }, + { + "slug": "john-benjamins-publishing-company-iconicity-in-language-and-literature", + "label": "John Benjamins Publishing Company - Iconicity in Language and Literature" + }, + { + "slug": "john-benjamins-publishing-company-linguistik-aktuell-linguistics-today", + "label": "John Benjamins Publishing Company - Linguistik Aktuell/Linguistics Today" + }, + { + "slug": "johnson-matthey-technology-review", + "label": "Johnson Matthey Technology Review" + }, + { + "slug": "journal-and-proceedings-of-the-royal-society-of-new-south-wales", + "label": "Journal and Proceedings of the Royal Society of New South Wales" + }, + { + "slug": "journal-de-la-societe-des-americanistes", + "label": "Journal de la Société des américanistes" + }, + { + "slug": "journal-de-la-societe-des-oceanistes", + "label": "Journal de la Société des Océanistes" + }, + { + "slug": "journal-for-the-history-of-astronomy", + "label": "Journal for the History of Astronomy" + }, + { + "slug": "journal-for-the-study-of-the-new-testament", + "label": "Journal for the Study of the New Testament" + }, + { + "slug": "journal-for-veterinary-medicine-biotechnology-and-biosafety", + "label": "Journal for Veterinary Medicine, Biotechnology and Biosafety" + }, + { + "slug": "journal-fur-kulturpflanzen-journal-of-cultivated-plants", + "label": "Journal für Kulturpflanzen - Journal of Cultivated Plants" + }, + { + "slug": "journal-fur-kunstgeschichte", + "label": "Journal für Kunstgeschichte" + }, + { + "slug": "journal-fur-medienlinguistik", + "label": "Journal für Medienlinguistik (Deutsch)" + }, + { + "slug": "journal-of-accounting-research", + "label": "Journal of Accounting Research" + }, + { + "slug": "journal-of-acoustics", + "label": "Journal of Acoustics" + }, + { + "slug": "journal-of-adolescent-health", + "label": "Journal of Adolescent Health" + }, + { + "slug": "journal-of-advertising-research", + "label": "Journal of Advertising Research" + }, + { + "slug": "journal-of-agricultural-and-applied-economics", + "label": "Journal of Agricultural and Applied Economics" + }, + { + "slug": "journal-of-agricultural-and-resource-economics", + "label": "Journal of Agricultural and Resource Economics" + }, + { + "slug": "journal-of-alzheimers-disease", + "label": "Journal of Alzheimer's Disease" + }, + { + "slug": "journal-of-analytical-toxicology", + "label": "Journal of Analytical Toxicology" + }, + { + "slug": "journal-of-animal-physiology-and-animal-nutrition", + "label": "Journal of Animal Physiology and Animal Nutrition" + }, + { + "slug": "journal-of-animal-science", + "label": "Journal of Animal Science" + }, + { + "slug": "journal-of-antimicrobial-chemotherapy", + "label": "Journal of Antimicrobial Chemotherapy" + }, + { + "slug": "journal-of-aoac-international", + "label": "Journal of AOAC International" + }, + { + "slug": "journal-of-applied-animal-science", + "label": "Journal of Applied Animal Science" + }, + { + "slug": "journal-of-applied-clinical-medical-physics", + "label": "Journal of Applied Clinical Medical Physics" + }, + { + "slug": "journal-of-applied-entomology", + "label": "Journal of Applied Entomology" + }, + { + "slug": "journal-of-applied-pharmaceutical-research", + "label": "Journal of Applied Pharmaceutical Research" + }, + { + "slug": "journal-of-applied-philosophy", + "label": "Journal of Applied Philosophy" + }, + { + "slug": "journal-of-applied-polymer-science", + "label": "Journal of Applied Polymer Science" + }, + { + "slug": "journal-of-archaeological-research", + "label": "Journal of Archaeological Research" + }, + { + "slug": "journal-of-atrial-fibrillation", + "label": "Journal of Atrial Fibrillation" + }, + { + "slug": "journal-of-australian-strength-and-conditioning", + "label": "Journal of Australian Strength & Conditioning" + }, + { + "slug": "journal-of-avian-biology", + "label": "Journal of Avian Biology" + }, + { + "slug": "journal-of-basic-microbiology", + "label": "Journal of Basic Microbiology" + }, + { + "slug": "journal-of-biological-chemistry", + "label": "The Journal of Biological Chemistry" + }, + { + "slug": "journal-of-biological-regulators-and-homeostatic-agents", + "label": "Journal of Biological Regulators & Homeostatic Agents" + }, + { + "slug": "journal-of-biomedical-materials-research-part-a", + "label": "Journal of Biomedical Materials Research Part A" + }, + { + "slug": "journal-of-biosciences", + "label": "Journal of Biosciences" + }, + { + "slug": "journal-of-bone-and-mineral-research", + "label": "Journal of Bone and Mineral Research" + }, + { + "slug": "journal-of-brachial-plexus-and-peripheral-nerve-injury", + "label": "Journal of Brachial Plexus and Peripheral Nerve Injury" + }, + { + "slug": "journal-of-breast-cancer", + "label": "Journal of Breast Cancer" + }, + { + "slug": "journal-of-burn-care-and-research", + "label": "Journal of Burn Care & Research" + }, + { + "slug": "journal-of-business-logistics", + "label": "Journal of Business Logistics" + }, + { + "slug": "journal-of-cachexia-sarcopenia-and-muscle", + "label": "Journal of Cachexia, Sarcopenia and Muscle" + }, + { + "slug": "journal-of-cardiothoracic-and-vascular-anesthesia", + "label": "Journal of Cardiothoracic and Vascular Anesthesia" + }, + { + "slug": "journal-of-cellular-and-molecular-medicine", + "label": "Journal of Cellular and Molecular Medicine" + }, + { + "slug": "journal-of-cellular-biochemistry", + "label": "Journal of Cellular Biochemistry" + }, + { + "slug": "journal-of-chemistry-and-chemical-engineering", + "label": "Journal of Chemistry and Chemical Engineering" + }, + { + "slug": "journal-of-chemometrics", + "label": "Journal of Chemometrics" + }, + { + "slug": "journal-of-clinical-and-translational-science", + "label": "Journal of Clinical and Translational Science" + }, + { + "slug": "journal-of-clinical-neurology", + "label": "Journal of Clinical Neurology" + }, + { + "slug": "journal-of-clinical-neurophysiology", + "label": "Journal of Clinical Neurophysiology" + }, + { + "slug": "journal-of-clinical-oncology", + "label": "Journal of Clinical Oncology" + }, + { + "slug": "journal-of-clinical-rheumatology", + "label": "Journal of Clinical Rheumatology" + }, + { + "slug": "journal-of-clinical-sleep-medicine", + "label": "Journal of Clinical Sleep Medicine" + }, + { + "slug": "journal-of-combinatorics", + "label": "Journal of Combinatorics" + }, + { + "slug": "journal-of-common-market-studies", + "label": "Journal of Common Market Studies" + }, + { + "slug": "journal-of-comparative-pathology", + "label": "Journal of Comparative Pathology" + }, + { + "slug": "journal-of-computational-chemistry", + "label": "Journal of Computational Chemistry" + }, + { + "slug": "journal-of-computer-applications-in-archaeology", + "label": "Journal of Computer Applications in Archaeology" + }, + { + "slug": "journal-of-computer-assisted-tomography", + "label": "Journal of Computer Assisted Tomography" + }, + { + "slug": "journal-of-computer-information-systems", + "label": "Journal of Computer Information Systems" + }, + { + "slug": "journal-of-consumer-research", + "label": "Journal of Consumer Research" + }, + { + "slug": "journal-of-contemporary-medicine", + "label": "Journal of Contemporary Medicine" + }, + { + "slug": "journal-of-contemporary-water-research-and-education", + "label": "Journal of Contemporary Water Research and Education" + }, + { + "slug": "journal-of-crohns-and-colitis-supplements", + "label": "Journal of Crohn's and Colitis Supplements" + }, + { + "slug": "journal-of-crohns-and-colitis", + "label": "Journal of Crohn's and Colitis" + }, + { + "slug": "journal-of-dairy-research", + "label": "Journal of Dairy Research" + }, + { + "slug": "journal-of-dairy-science", + "label": "Journal of Dairy Science" + }, + { + "slug": "journal-of-dental-research", + "label": "Journal of Dental Research" + }, + { + "slug": "journal-of-dental-traumatology", + "label": "Journal of Dental Traumatology" + }, + { + "slug": "journal-of-early-christian-studies", + "label": "Journal of Early Christian Studies" + }, + { + "slug": "journal-of-economic-impact", + "label": "Journal of Economic Impact" + }, + { + "slug": "journal-of-egyptian-history", + "label": "Journal of Egyptian History" + }, + { + "slug": "journal-of-elections-public-opinion-and-parties", + "label": "Journal of Elections, Public Opinion & Parties" + }, + { + "slug": "journal-of-emerging-investigators", + "label": "Journal of Emerging Investigators" + }, + { + "slug": "journal-of-endodontics", + "label": "Journal of Endodontics" + }, + { + "slug": "journal-of-environmental-science-and-health-part-b", + "label": "Journal of Environmental Science and Health, Part B" + }, + { + "slug": "journal-of-ethnobiology", + "label": "Journal of Ethnobiology" + }, + { + "slug": "journal-of-european-public-policy", + "label": "Journal of European Public Policy" + }, + { + "slug": "journal-of-evolution-and-health", + "label": "Journal of Evolution and Health" + }, + { + "slug": "journal-of-evolutionary-biology", + "label": "Journal of Evolutionary Biology" + }, + { + "slug": "journal-of-experimental-botany", + "label": "Journal of Experimental Botany" + }, + { + "slug": "journal-of-field-ornithology", + "label": "Journal of Field Ornithology" + }, + { + "slug": "journal-of-finance", + "label": "Journal of Finance" + }, + { + "slug": "journal-of-financial-and-quantitative-analysis", + "label": "Journal of Financial and Quantitative Analysis" + }, + { + "slug": "journal-of-fish-biology", + "label": "Journal of Fish Biology" + }, + { + "slug": "journal-of-food-protection", + "label": "Journal of Food Protection" + }, + { + "slug": "journal-of-foraminiferal-research", + "label": "Journal of Foraminiferal Research" + }, + { + "slug": "journal-of-forensic-sciences", + "label": "Journal of Forensic Sciences" + }, + { + "slug": "journal-of-frailty-and-aging", + "label": "Journal of Frailty & Aging" + }, + { + "slug": "journal-of-geriatric-psychiatry-and-neurology", + "label": "Journal of Geriatric Psychiatry and Neurology" + }, + { + "slug": "journal-of-glaciology", + "label": "Journal of Glaciology" + }, + { + "slug": "journal-of-global-health", + "label": "Journal of Global Health" + }, + { + "slug": "journal-of-health-care-for-the-poor-and-underserved", + "label": "Journal of Health Care for the Poor and Underserved" + }, + { + "slug": "journal-of-hearing-science", + "label": "Journal of Hearing Science" + }, + { + "slug": "journal-of-historical-linguistics", + "label": "Journal of Historical Linguistics" + }, + { + "slug": "journal-of-human-evolution", + "label": "Journal of Human Evolution" + }, + { + "slug": "journal-of-human-nutrition-and-dietetics", + "label": "Journal of Human Nutrition and Dietetics" + }, + { + "slug": "journal-of-human-rights", + "label": "Journal of Human Rights" + }, + { + "slug": "journal-of-hypertension", + "label": "Journal of Hypertension" + }, + { + "slug": "journal-of-industrial-and-engineering-chemistry", + "label": "Journal of Industrial and Engineering Chemistry" + }, + { + "slug": "journal-of-industrial-ecology", + "label": "Journal of Industrial Ecology" + }, + { + "slug": "journal-of-infection", + "label": "Journal of Infection" + }, + { + "slug": "journal-of-infectious-diseases", + "label": "Journal of Infectious Diseases" + }, + { + "slug": "journal-of-information-technology", + "label": "Journal of Information Technology" + }, + { + "slug": "journal-of-institutional-and-theoretical-economics", + "label": "Journal of Institutional and Theoretical Economics" + }, + { + "slug": "journal-of-instrumentation", + "label": "Journal of Instrumentation" + }, + { + "slug": "journal-of-integrated-omics", + "label": "Journal of Integrated OMICS" + }, + { + "slug": "journal-of-interactive-marketing", + "label": "Journal of Interactive Marketing" + }, + { + "slug": "journal-of-intercultural-studies", + "label": "Journal of Intercultural Studies" + }, + { + "slug": "journal-of-internal-medicine", + "label": "Journal of Internal Medicine" + }, + { + "slug": "journal-of-international-business-studies", + "label": "Journal of International Business Studies" + }, + { + "slug": "journal-of-international-economic-law", + "label": "Journal of International Economic Law" + }, + { + "slug": "journal-of-international-peacekeeping", + "label": "Journal of International Peacekeeping" + }, + { + "slug": "journal-of-international-relations-and-development", + "label": "Journal of International Relations and Development" + }, + { + "slug": "journal-of-investigative-dermatology", + "label": "Journal of Investigative Dermatology" + }, + { + "slug": "journal-of-jewish-studies", + "label": "Journal of Jewish Studies" + }, + { + "slug": "journal-of-korean-neurosurgical-society", + "label": "Journal of Korean Neurosurgical Society" + }, + { + "slug": "journal-of-law-medicine-ethics", + "label": "Journal of Law, Medicine & Ethics" + }, + { + "slug": "journal-of-leukocyte-biology", + "label": "Journal of Leukocyte Biology" + }, + { + "slug": "journal-of-limnology", + "label": "Journal of Limnology" + }, + { + "slug": "journal-of-linguistics", + "label": "Journal of Linguistics" + }, + { + "slug": "journal-of-lipid-research", + "label": "Journal of Lipid Research" + }, + { + "slug": "journal-of-lithic-studies", + "label": "Journal of Lithic Studies" + }, + { + "slug": "journal-of-magnetic-resonance-imaging", + "label": "Journal Of Magnetic Resonance Imaging" + }, + { + "slug": "journal-of-mammalogy", + "label": "Journal of Mammalogy" + }, + { + "slug": "journal-of-management-information-systems", + "label": "Journal of Management Information Systems" + }, + { + "slug": "journal-of-management-studies", + "label": "Journal of Management Studies" + }, + { + "slug": "journal-of-management", + "label": "Journal of Management" + }, + { + "slug": "journal-of-materials-research", + "label": "Journal of Materials Research" + }, + { + "slug": "journal-of-mechanical-science-and-technology", + "label": "Journal of Mechanical Science and Technology" + }, + { + "slug": "journal-of-medical-genetics", + "label": "Journal of Medical Genetics" + }, + { + "slug": "journal-of-medical-internet-research", + "label": "Journal of Medical Internet Research" + }, + { + "slug": "journal-of-microbiology-and-biotechnology", + "label": "Journal of Microbiology and Biotechnology" + }, + { + "slug": "journal-of-microbiology", + "label": "Journal of Microbiology" + }, + { + "slug": "journal-of-midwifery-science", + "label": "Journal of Midwifery Science" + }, + { + "slug": "journal-of-minimally-invasive-gynecology", + "label": "Journal of Minimally Invasive Gynecology" + }, + { + "slug": "journal-of-molecular-cell-biology", + "label": "Journal of Molecular Cell Biology" + }, + { + "slug": "journal-of-molecular-endocrinology", + "label": "Journal of Molecular Endocrinology" + }, + { + "slug": "journal-of-molecular-recognition", + "label": "Journal of Molecular Recognition" + }, + { + "slug": "journal-of-molecular-signaling", + "label": "Journal of Molecular Signaling" + }, + { + "slug": "journal-of-move-and-therapeutic-science", + "label": "Journal of Move and Therapeutic Science" + }, + { + "slug": "journal-of-musculoskeletal-research", + "label": "Journal of Musculoskeletal Research" + }, + { + "slug": "journal-of-music-technology-and-education", + "label": "Journal of Music Technology and Education" + }, + { + "slug": "journal-of-nanoscience-and-nanotechnology", + "label": "Journal of Nanoscience and Nanotechnology" + }, + { + "slug": "journal-of-natural-history", + "label": "Journal of Natural History" + }, + { + "slug": "journal-of-neolithic-archaeology", + "label": "Journal of Neolithic Archaeology" + }, + { + "slug": "journal-of-neurochemistry", + "label": "Journal of Neurochemistry" + }, + { + "slug": "journal-of-neuroendocrinology", + "label": "Journal of Neuroendocrinology" + }, + { + "slug": "journal-of-neuroimaging", + "label": "Journal of Neuroimaging" + }, + { + "slug": "journal-of-neurological-disorders", + "label": "Journal of Neurological Disorders" + }, + { + "slug": "journal-of-neurophysiology", + "label": "Journal of Neurophysiology" + }, + { + "slug": "journal-of-neuroscience-and-neuroengineering", + "label": "Journal of Neuroscience and Neuroengineering" + }, + { + "slug": "journal-of-new-zealand-grasslands", + "label": "Journal of New Zealand Grasslands" + }, + { + "slug": "journal-of-nutrition", + "label": "Journal of Nutrition" + }, + { + "slug": "journal-of-occupational-and-environmental-medicine", + "label": "Journal of Occupational and Environmental Medicine" + }, + { + "slug": "journal-of-oil-palm-research", + "label": "Journal of Oil Palm Research" + }, + { + "slug": "journal-of-open-research-software", + "label": "Journal of Open Research Software" + }, + { + "slug": "journal-of-oral-and-maxillofacial-surgery", + "label": "Journal of Oral and Maxillofacial Surgery" + }, + { + "slug": "journal-of-orthopaedic-research", + "label": "Journal of Orthopaedic Research" + }, + { + "slug": "journal-of-orthopaedic-trauma", + "label": "Journal of Orthopaedic Trauma" + }, + { + "slug": "journal-of-orthopaedics-trauma-and-rehabilitation", + "label": "Journal of Orthopaedics, Trauma and Rehabilitation" + }, + { + "slug": "journal-of-paleontology", + "label": "Journal of Paleontology" + }, + { + "slug": "journal-of-peace-research", + "label": "Journal of Peace Research" + }, + { + "slug": "journal-of-pediatric-gastroenterology-and-nutrition", + "label": "Journal of Pediatric Gastroenterology and Nutrition" + }, + { + "slug": "journal-of-peptide-science", + "label": "Journal of Peptide Science" + }, + { + "slug": "journal-of-perinatal-medicine", + "label": "Journal of Perinatal Medicine" + }, + { + "slug": "journal-of-periodontal-research", + "label": "Journal of Periodontal Research" + }, + { + "slug": "journal-of-petrology", + "label": "Journal of Petrology" + }, + { + "slug": "journal-of-pharmacy-and-pharmacology", + "label": "Journal of Pharmacy and Pharmacology" + }, + { + "slug": "journal-of-phycology", + "label": "Journal of Phycology" + }, + { + "slug": "journal-of-physical-therapy-science", + "label": "Journal of Physical Therapy Science" + }, + { + "slug": "journal-of-plankton-research", + "label": "Journal of Plankton Research" + }, + { + "slug": "journal-of-plant-ecology", + "label": "Journal of Plant Ecology" + }, + { + "slug": "journal-of-plant-nutrition-and-soil-science", + "label": "Journal of Plant Nutrition and Soil Science" + }, + { + "slug": "journal-of-plant-protection-research", + "label": "Journal of Plant Protection Research" + }, + { + "slug": "journal-of-political-ideologies", + "label": "Journal of Political Ideologies" + }, + { + "slug": "journal-of-political-philosophy", + "label": "Journal of Political Philosophy" + }, + { + "slug": "journal-of-pollination-ecology", + "label": "Journal of Pollination Ecology" + }, + { + "slug": "journal-of-polymer-science-part-a-polymer-chemistry", + "label": "Journal of Polymer Science Part A: Polymer Chemistry" + }, + { + "slug": "journal-of-porphyrins-and-phthalocyanines", + "label": "Journal of Porphyrins and Phthalocyanines" + }, + { + "slug": "journal-of-product-innovation-management", + "label": "Journal of Product Innovation Management" + }, + { + "slug": "journal-of-prosthodontics", + "label": "Journal of Prosthodontics" + }, + { + "slug": "journal-of-psychiatric-and-mental-health-nursing", + "label": "Journal of Psychiatric and Mental Health Nursing" + }, + { + "slug": "journal-of-psychiatry-and-neuroscience", + "label": "Journal of Psychiatry & Neuroscience" + }, + { + "slug": "journal-of-raman-spectroscopy", + "label": "Journal of Raman Spectroscopy" + }, + { + "slug": "journal-of-reconstructive-microsurgery", + "label": "Journal of Reconstructive Microsurgery" + }, + { + "slug": "journal-of-refugee-studies", + "label": "Journal of Refugee Studies" + }, + { + "slug": "journal-of-rehabilitation-medicine", + "label": "Journal of Rehabilitation Medicine" + }, + { + "slug": "journal-of-retailing", + "label": "Journal of Retailing" + }, + { + "slug": "journal-of-rheumatology", + "label": "Journal of Rheumatology" + }, + { + "slug": "journal-of-roman-archaeology-a", + "label": "Journal of Roman Archaeology (A)" + }, + { + "slug": "journal-of-roman-archaeology-b", + "label": "Journal of Roman Archaeology (B)" + }, + { + "slug": "journal-of-science-and-medicine-in-sport", + "label": "Journal of Science and Medicine in Sport" + }, + { + "slug": "journal-of-separation-science", + "label": "Journal of Separation Science" + }, + { + "slug": "journal-of-shoulder-and-elbow-surgery", + "label": "Journal of Shoulder and Elbow Surgery" + }, + { + "slug": "journal-of-simulation", + "label": "Journal of Simulation" + }, + { + "slug": "journal-of-sleep-research", + "label": "Journal of Sleep Research" + }, + { + "slug": "journal-of-small-animal-practice", + "label": "Journal of Small Animal Practice" + }, + { + "slug": "journal-of-small-business-management", + "label": "Journal of Small Business Management" + }, + { + "slug": "journal-of-social-archaeology", + "label": "Journal of Social Archaeology" + }, + { + "slug": "journal-of-social-philosophy", + "label": "Journal of Social Philosophy" + }, + { + "slug": "journal-of-soil-and-water-conservation", + "label": "Journal of Soil and Water Conservation" + }, + { + "slug": "journal-of-soil-science-and-plant-nutrition", + "label": "Journal of Soil Science and Plant Nutrition" + }, + { + "slug": "journal-of-sport-and-health-science", + "label": "Journal of Sport and Health Science" + }, + { + "slug": "journal-of-sports-science-and-medicine", + "label": "Journal of Sports Science & Medicine" + }, + { + "slug": "journal-of-strength-and-conditioning-research", + "label": "Journal of Strength and Conditioning Research" + }, + { + "slug": "journal-of-stroke", + "label": "Journal of Stroke" + }, + { + "slug": "journal-of-structural-geology", + "label": "Journal of Structural Geology" + }, + { + "slug": "journal-of-studies-on-alcohol-and-drugs", + "label": "Journal of Studies on Alcohol and Drugs" + }, + { + "slug": "journal-of-surgery-and-medicine", + "label": "Journal of Surgery and Medicine" + }, + { + "slug": "journal-of-surgical-oncology", + "label": "Journal of Surgical Oncology" + }, + { + "slug": "journal-of-systematic-palaeontology", + "label": "Journal of Systematic Palaeontology" + }, + { + "slug": "journal-of-the-air-and-waste-management-association", + "label": "Journal of the Air & Waste Management Association" + }, + { + "slug": "journal-of-the-american-academy-of-audiology", + "label": "Journal of the American Academy of Audiology" + }, + { + "slug": "journal-of-the-american-academy-of-orthopaedic-surgeons", + "label": "Journal of the American Academy of Orthopaedic Surgeons" + }, + { + "slug": "journal-of-the-american-animal-hospital-association", + "label": "Journal of the American Animal Hospital Association" + }, + { + "slug": "journal-of-the-american-association-of-laboratory-animal-science", + "label": "Journal of the American Association of Laboratory Animal Science" + }, + { + "slug": "journal-of-the-american-ceramic-society", + "label": "Journal of the American Ceramic Society" + }, + { + "slug": "journal-of-the-american-college-of-cardiology", + "label": "Journal of the American College of Cardiology" + }, + { + "slug": "journal-of-the-american-college-of-surgeons", + "label": "Journal of the American College of Surgeons" + }, + { + "slug": "journal-of-the-american-heart-association", + "label": "Journal of the American Heart Association" + }, + { + "slug": "journal-of-the-american-philosophical-association", + "label": "Journal of the American Philosophical Association" + }, + { + "slug": "journal-of-the-american-society-of-brewing-chemists", + "label": "Journal of the American Society of Brewing Chemists" + }, + { + "slug": "journal-of-the-american-society-of-nephrology", + "label": "Journal of the American Society of Nephrology" + }, + { + "slug": "journal-of-the-american-water-resources-association", + "label": "Journal of the American Water Resources Association" + }, + { + "slug": "journal-of-the-association-for-information-systems", + "label": "Journal of the Association for Information Systems" + }, + { + "slug": "journal-of-the-association-of-environmental-and-resource-economists", + "label": "Journal of the Association of Environmental and Resource Economists" + }, + { + "slug": "journal-of-the-botanical-research-institute-of-texas", + "label": "Journal of the Botanical Research Institute of Texas" + }, + { + "slug": "journal-of-the-brazilian-chemical-society", + "label": "Journal of the Brazilian Chemical Society" + }, + { + "slug": "journal-of-the-electrochemical-society", + "label": "Journal of The Electrochemical Society" + }, + { + "slug": "journal-of-the-european-academy-of-dermatology-and-venereology", + "label": "Journal of the European Academy of Dermatology and Venereology" + }, + { + "slug": "journal-of-the-history-of-collections", + "label": "Journal of the History of Collections" + }, + { + "slug": "journal-of-the-indian-law-institute", + "label": "Journal of the Indian Law Institute" + }, + { + "slug": "journal-of-the-korean-society-of-civil-engineers", + "label": "Journal of the Korean Society of Civil Engineers" + }, + { + "slug": "journal-of-the-marine-biological-association-of-the-united-kingdom", + "label": "Journal of the Marine Biological Association of the United Kingdom" + }, + { + "slug": "journal-of-the-royal-anthropological-institute", + "label": "Journal of the Royal Anthropological Institute" + }, + { + "slug": "journal-of-the-royal-society-of-western-australia", + "label": "Journal of the Royal Society of Western Australia" + }, + { + "slug": "journal-of-the-royal-statistical-society", + "label": "Journal of the Royal Statistical Society" + }, + { + "slug": "journal-of-the-science-of-food-and-agriculture", + "label": "Journal of the Science of Food and Agriculture" + }, + { + "slug": "journal-of-the-serbian-chemical-society", + "label": "Journal of the Serbian Chemical Society" + }, + { + "slug": "journal-of-the-warburg-and-courtauld-institutes", + "label": "Journal of the Warburg and Courtauld Institutes" + }, + { + "slug": "journal-of-thermal-spray-technology", + "label": "Journal of Thermal Spray Technology" + }, + { + "slug": "journal-of-threatened-taxa", + "label": "Journal of Threatened Taxa" + }, + { + "slug": "journal-of-thrombosis-and-haemostasis", + "label": "Journal of Thrombosis and Haemostasis" + }, + { + "slug": "journal-of-tropical-ecology", + "label": "Journal of Tropical Ecology" + }, + { + "slug": "journal-of-tropical-life-science", + "label": "Journal of Tropical Life Science" + }, + { + "slug": "journal-of-universal-computer-science", + "label": "Journal of Universal Computer Science" + }, + { + "slug": "journal-of-urban-and-environmental-engineering", + "label": "Journal of Urban and Environmental Engineering" + }, + { + "slug": "journal-of-urban-technology", + "label": "Journal of Urban Technology" + }, + { + "slug": "journal-of-value-inquiry", + "label": "The Journal of Value Inquiry" + }, + { + "slug": "journal-of-vegetation-science", + "label": "Journal of Vegetation Science" + }, + { + "slug": "journal-of-vertebrate-biology", + "label": "Journal of Vertebrate Biology" + }, + { + "slug": "journal-of-vertebrate-paleontology", + "label": "Journal of Vertebrate Paleontology" + }, + { + "slug": "journal-of-vestibular-research", + "label": "Journal of Vestibular Research" + }, + { + "slug": "journal-of-veterinary-diagnostic-investigation", + "label": "Journal of Veterinary Diagnostic Investigation" + }, + { + "slug": "journal-of-visualized-experiments", + "label": "Journal of Visualized Experiments" + }, + { + "slug": "journal-of-water-sanitation-and-hygiene-for-development", + "label": "Journal of Water Sanitation and Hygiene for Development" + }, + { + "slug": "journal-of-wildlife-diseases", + "label": "Journal of Wildlife Diseases" + }, + { + "slug": "journal-of-zoo-and-wildlife-medicine", + "label": "Journal of Zoo and Wildlife Medicine" + }, + { + "slug": "journal-of-zoo-biology", + "label": "Journal of Zoo Biology" + }, + { + "slug": "journal-of-zoology", + "label": "Journal of Zoology" + }, + { + "slug": "journal-on-efficiency-and-responsibility-in-education-and-science", + "label": "Journal on Efficiency and Responsibility in Education and Science" + }, + { + "slug": "journalistica", + "label": "Journalistica (Dansk)" + }, + { + "slug": "jurisprudence", + "label": "Jurisprudence (Čeština)" + }, + { + "slug": "juristische-schulung", + "label": "Juristische Schulung (Deutsch)" + }, + { + "slug": "juristische-zitierweise-offentliches-recht", + "label": "Juristische Zitierweise - Öffentliches Recht (Deutsch)" + }, + { + "slug": "juristische-zitierweise-schweizer", + "label": "Juristische Zitierweise Schweizer (Ryser Büschi et al.) (Deutsch - Schweiz)" + }, + { + "slug": "juristische-zitierweise", + "label": "Juristische Zitierweise (Stüber) (Deutsch)" + }, + { + "slug": "jurnal-ilmu-dan-teknologi-hasil-ternak", + "label": "Jurnal Ilmu dan Teknologi Hasil Ternak" + }, + { + "slug": "jurnal-pangan-dan-agroindustri", + "label": "Jurnal Pangan dan Agroindustri (Bahasa Indonesia)" + }, + { + "slug": "jurnal-sains-farmasi-dan-klinis", + "label": "Jurnal Sains Farmasi & Klinis" + }, + { + "slug": "jurnal-teknik-mesin-indonesia", + "label": "Jurnal Teknik Mesin Indonesia (Bahasa Indonesia)" + }, + { + "slug": "jyvaskylan-yliopisto-kemian-laitos", + "label": "Jyväskylän yliopisto - Kemian laitos (Suomi)" + }, + { + "slug": "karabuk-university-graduate-school-of-natural-and-applied-sciences", + "label": "Karabuk University - Graduate School of Natural and Applied Sciences" + }, + { + "slug": "karger-journals-author-date", + "label": "Karger journals (author-date)" + }, + { + "slug": "karger-journals", + "label": "Karger journals" + }, + { + "slug": "karlstad-universitet-harvard", + "label": "Karlstad Universitet - Harvard (Svenska)" + }, + { + "slug": "karstenia", + "label": "Karstenia" + }, + { + "slug": "keel-ja-kirjandus", + "label": "Keel ja Kirjandus (Eesti keel)" + }, + { + "slug": "kidney-research-and-clinical-practice", + "label": "Kidney Research and Clinical Practice" + }, + { + "slug": "kindheit-und-entwicklung", + "label": "Kindheit und Entwicklung" + }, + { + "slug": "kit-karlsruher-institut-fur-technologie-germanistik-ndl-neuere-deutsche-literaturwissenschaft", + "label": "KIT Karlsruher Institut für Technologie Germanistik NDL Neuere Deutsche Literaturwissenschaft (German)" + }, + { + "slug": "klinische-padiatrie", + "label": "Klinische Pädiatrie" + }, + { + "slug": "knee-surgery-and-related-research", + "label": "Knee Surgery & Related Research" + }, + { + "slug": "knee-surgery-sports-traumatology-arthroscopy", + "label": "Knee Surgery, Sports Traumatology, Arthroscopy" + }, + { + "slug": "knowledge-and-management-of-aquatic-ecosystems", + "label": "Knowledge & Management of Aquatic Ecosystems" + }, + { + "slug": "kolner-zeitschrift-fur-soziologie-und-sozialpsychologie", + "label": "Kölner Zeitschrift für Soziologie und Sozialpsychologie (Deutsch)" + }, + { + "slug": "kommunikation-und-recht", + "label": "Kommunikation und Recht (Deutsch)" + }, + { + "slug": "kona-powder-and-particle-journal", + "label": "KONA Powder and Particle Journal" + }, + { + "slug": "korean-journal-of-anesthesiology", + "label": "Korean Journal of Anesthesiology" + }, + { + "slug": "korean-journal-of-radiology", + "label": "Korean Journal of Radiology" + }, + { + "slug": "kritische-ausgabe", + "label": "Kritische Ausgabe (Deutsch)" + }, + { + "slug": "ksce-journal-of-civil-engineering", + "label": "KSCE Journal of Civil Engineering" + }, + { + "slug": "kth-royal-institute-of-technology-school-of-computer-science-and-communication-sv", + "label": "KTH Royal Institute of Technology - School of Computer Science and Communication (Svenska)" + }, + { + "slug": "kth-royal-institute-of-technology-school-of-computer-science-and-communication", + "label": "KTH Royal Institute of Technology - School of Computer Science and Communication" + }, + { + "slug": "kunstakademie-munster", + "label": "Kunstakademie Münster (Deutsch)" + }, + { + "slug": "l-homme", + "label": "L'homme – Revue française d'anthropologie" + }, + { + "slug": "la-nouvelle-revue-du-travail", + "label": "la Nouvelle Revue du Travail (Français)" + }, + { + "slug": "la-revue-des-sciences-de-gestion", + "label": "La Revue des Sciences de Gestion (Français)" + }, + { + "slug": "la-trobe-university-apa", + "label": "La Trobe University - APA 6th edition" + }, + { + "slug": "la-trobe-university-harvard", + "label": "La Trobe University - Harvard" + }, + { + "slug": "laboratory-animal-science-professional", + "label": "Laboratory Animal Science Professional" + }, + { + "slug": "lancaster-university-harvard", + "label": "Lancaster University - Harvard" + }, + { + "slug": "land-degradation-and-development", + "label": "Land Degradation & Development" + }, + { + "slug": "landes-bioscience-journals", + "label": "Landes Bioscience Journals" + }, + { + "slug": "language-in-society", + "label": "Language in Society" + }, + { + "slug": "language", + "label": "Language" + }, + { + "slug": "lannee-sociologique", + "label": "L’Année sociologique (Français)" + }, + { + "slug": "latin-american-perspectives", + "label": "Latin American Perspectives" + }, + { + "slug": "latin-american-research-review", + "label": "Latin American Research Review" + }, + { + "slug": "lauterbornia", + "label": "Lauterbornia - Internationale Zeitschrift für Faunistik und Floristik des Süßwassers (Deutsch)" + }, + { + "slug": "law-and-society-review", + "label": "Law & Society Review" + }, + { + "slug": "law-citation-manual", + "label": "Manual of Legal Citation (法学注引手册, 中文)" + }, + { + "slug": "law-technology-and-humans", + "label": "Law, Technology and Humans" + }, + { + "slug": "lcgc", + "label": "LCGC" + }, + { + "slug": "le-mouvement-social", + "label": "Le Mouvement Social (Français)" + }, + { + "slug": "le-tapuscrit-author-date", + "label": "Le tapuscrit (École des hautes études en sciences sociales) (author-date, Français)" + }, + { + "slug": "le-tapuscrit-note", + "label": "Le tapuscrit (École des hautes études en sciences sociales) (note, Français)" + }, + { + "slug": "leiden-journal-of-international-law", + "label": "Leiden Journal of International Law" + }, + { + "slug": "leidraad-voor-juridische-auteurs", + "label": "Leidraad voor juridische auteurs 2019 (Nederlands)" + }, + { + "slug": "leonardo", + "label": "Leonardo" + }, + { + "slug": "les-cahiers-du-journalisme", + "label": "Les Cahiers du journalisme (Français)" + }, + { + "slug": "les-journees-de-la-recherche-avicole", + "label": "Les Journées de la Recherche Avicole (Français)" + }, + { + "slug": "les-journees-de-la-recherche-porcine", + "label": "Les Journées de la Recherche Porcine (Français)" + }, + { + "slug": "les-mondes-du-travail", + "label": "Les Mondes du travail (Français)" + }, + { + "slug": "les-nouvelles-de-l-archeologie", + "label": "Les nouvelles de l'archéologie (Français)" + }, + { + "slug": "lethaia", + "label": "Lethaia" + }, + { + "slug": "letters-in-applied-microbiology", + "label": "Letters in Applied Microbiology" + }, + { + "slug": "lettres-et-sciences-humaines-fr", + "label": "Lettres et Sciences Humaines (biblio et notes, Français)" + }, + { + "slug": "leviathan", + "label": "Leviathan (Deutsch)" + }, + { + "slug": "lien-social-et-politiques", + "label": "Lien social et Politiques (Français)" + }, + { + "slug": "life-science-alliance", + "label": "Life Science Alliance" + }, + { + "slug": "limnetica", + "label": "Limnetica" + }, + { + "slug": "limnology-and-oceanography", + "label": "Limnology and Oceanography" + }, + { + "slug": "liver-international", + "label": "Liver International" + }, + { + "slug": "liverpool-john-moores-university-harvard", + "label": "Liverpool John Moores University - Harvard" + }, + { + "slug": "lluelles-no-ibid", + "label": "Guide des références pour la rédaction juridique 7e édition (Notes complètes) (Guide Lluelles, no Ibid., Français - Canada)" + }, + { + "slug": "lluelles", + "label": "Guide des références pour la rédaction juridique 7e édition (Guide Lluelles, Français - Canada)" + }, + { + "slug": "london-metropolitan-university-harvard", + "label": "London Metropolitan University - Harvard" + }, + { + "slug": "london-review-of-international-law", + "label": "London Review of International Law" + }, + { + "slug": "london-south-bank-university-numeric", + "label": "London South Bank University (numeric)" + }, + { + "slug": "lund-university-school-of-economics-and-management", + "label": "Lund University School of Economics and Management" + }, + { + "slug": "macromolecular-reaction-engineering", + "label": "Macromolecular Reaction Engineering" + }, + { + "slug": "magnetic-resonance-in-medical-sciences", + "label": "Magnetic Resonance in Medical Sciences" + }, + { + "slug": "magnetic-resonance-materials-in-physics-biology-and-medicine", + "label": "Magnetic Resonance Materials in Physics, Biology and Medicine" + }, + { + "slug": "maison-de-l-orient-et-de-la-mediterranee-en", + "label": "Maison de l'Orient et de la Méditerranée (English)" + }, + { + "slug": "maison-de-l-orient-et-de-la-mediterranee", + "label": "Maison de l'Orient et de la Méditerranée (Français)" + }, + { + "slug": "malaysian-orthopaedic-journal", + "label": "Malaysian Orthopaedic Journal" + }, + { + "slug": "mammal-review", + "label": "Mammal Review" + }, + { + "slug": "mammalia", + "label": "Mammalia" + }, + { + "slug": "mammalogy-notes", + "label": "Mammalogy Notes" + }, + { + "slug": "management-et-avenir", + "label": "Management & Avenir (Français)" + }, + { + "slug": "management-international", + "label": "Management international" + }, + { + "slug": "management-of-biological-invasions", + "label": "Management of Biological Invasions" + }, + { + "slug": "manchester-university-press-author-date", + "label": "Manchester University Press monographs (author-date)" + }, + { + "slug": "manchester-university-press", + "label": "Manchester University Press monographs (note)" + }, + { + "slug": "marine-biology", + "label": "Marine Biology" + }, + { + "slug": "marine-mammal-science", + "label": "Marine Mammal Science" + }, + { + "slug": "marine-ornithology", + "label": "Marine Ornithology" + }, + { + "slug": "marine-turtle-newsletter", + "label": "Marine Turtle Newsletter" + }, + { + "slug": "marmara-universitesi-turkiyat-arastirmalari-enstitusu", + "label": "Marmara Üniversitesi - Türkiyat Araştırmaları Enstitüsü (Türkçe)" + }, + { + "slug": "mary-ann-liebert-harvard", + "label": "Mary Ann Liebert - Harvard" + }, + { + "slug": "mary-ann-liebert-vancouver", + "label": "Mary Ann Liebert - Vancouver" + }, + { + "slug": "masarykova-univerzita-pravnicka-fakulta", + "label": "Masarykova univerzita - Právnická fakulta" + }, + { + "slug": "mastozoologia-neotropical", + "label": "Mastozoologia Neotropical" + }, + { + "slug": "materials-express", + "label": "Materials Express" + }, + { + "slug": "mathematical-geosciences", + "label": "Mathematical Geosciences" + }, + { + "slug": "mathematics-and-computers-in-simulation", + "label": "Mathematics and Computers in Simulation" + }, + { + "slug": "mcdonald-institute-monographs", + "label": "McDonald Institute Monographs" + }, + { + "slug": "mcgill-en", + "label": "Canadian Guide to Uniform Legal Citation 9th edition (McGill Guide)" + }, + { + "slug": "mcgill-fr", + "label": "Manuel canadien de la référence juridique 9e édition (Guide McGill, Français - Canada)" + }, + { + "slug": "medecine-intensive-reanimation", + "label": "Médecine Intensive Réanimation" + }, + { + "slug": "medecine-sciences", + "label": "médecine/sciences" + }, + { + "slug": "media-culture-and-society", + "label": "Media, Culture & Society" + }, + { + "slug": "mediaeval-studies", + "label": "Mediaeval Studies" + }, + { + "slug": "medical-dosimetry", + "label": "Medical Dosimetry" + }, + { + "slug": "medical-history", + "label": "Medical History" + }, + { + "slug": "medicina-clinica", + "label": "Medicina Clínica (Español)" + }, + { + "slug": "medicina-delle-dipendenze-italian-journal-of-the-addictions", + "label": "Medicina delle Dipendenze - Italian Journal of the Addictions (Italiano)" + }, + { + "slug": "medicinal-research-reviews", + "label": "Medicinal Research Reviews" + }, + { + "slug": "medicine-and-science-in-sports-and-exercise", + "label": "Medicine & Science in Sports & Exercise" + }, + { + "slug": "medicine-publishing", + "label": "Medicine Publishing" + }, + { + "slug": "medicinski-razgledi", + "label": "Medicinski razgledi" + }, + { + "slug": "medicinskiy-akademicheskiy-zhurnal", + "label": "Medicinskiy Akademicheskiy Zhurnal" + }, + { + "slug": "mediterranean-journal-of-chemistry", + "label": "Mediterranean Journal of Chemistry" + }, + { + "slug": "mediterranean-journal-of-infection-microbes-and-antimicrobials", + "label": "Mediterranean Journal of Infection, Microbes and Antimicrobials" + }, + { + "slug": "mediterranean-politics", + "label": "Mediterranean Politics" + }, + { + "slug": "medizinische-hochschule-hannover", + "label": "Medizinische Hochschule Hannover" + }, + { + "slug": "medizinische-universitat-innsbruck-vancouver", + "label": "Medizinische Universität Innsbruck - Vancouver (Deutsch)" + }, + { + "slug": "melbourne-school-of-theology", + "label": "Melbourne School of Theology" + }, + { + "slug": "memorias-do-instituto-oswaldo-cruz", + "label": "Memórias do Instituto Oswaldo Cruz" + }, + { + "slug": "mercator-institut-fur-sprachforderung-und-deutsch-als-zweitsprache", + "label": "Mercator-Institut für Sprachförderung und Deutsch als Zweitsprache (Deutsch)" + }, + { + "slug": "mercatus-center", + "label": "Mercatus Center" + }, + { + "slug": "meta", + "label": "Meta" + }, + { + "slug": "metallurgical-and-materials-transactions-a", + "label": "Metallurgical and Materials Transactions A" + }, + { + "slug": "metallurgical-and-materials-transactions", + "label": "Metallurgical and Materials Transactions" + }, + { + "slug": "meteoritics-and-planetary-science", + "label": "Meteoritics & Planetary Science" + }, + { + "slug": "meteorological-applications", + "label": "Meteorological Applications" + }, + { + "slug": "method-and-theory-in-the-study-of-religion", + "label": "Method & Theory in the Study of Religion" + }, + { + "slug": "methods-of-information-in-medicine", + "label": "Methods of Information in Medicine" + }, + { + "slug": "metropol-verlag", + "label": "Metropol Verlag (Deutsch)" + }, + { + "slug": "metropolia-university-of-applied-sciences-harvard", + "label": "Metropolia Ammattikorkeakoulu - Harvard (Suomi)" + }, + { + "slug": "metropolitiques", + "label": "Métropolitiques (Français)" + }, + { + "slug": "microbial-cell", + "label": "Microbial Cell" + }, + { + "slug": "microbiology-society", + "label": "Microbiology Society" + }, + { + "slug": "microbiome-research-reports", + "label": "Microbiome Research Reports" + }, + { + "slug": "microcirculation", + "label": "Microcirculation" + }, + { + "slug": "microscopy-and-microanalysis", + "label": "Microscopy and Microanalysis" + }, + { + "slug": "middle-east-critique", + "label": "Middle East Critique" + }, + { + "slug": "midwestern-baptist-theological-seminary", + "label": "Midwestern Baptist Theological Seminary" + }, + { + "slug": "mimbar-hukum", + "label": "Mimbar Hukum" + }, + { + "slug": "mimesis-edizioni", + "label": "Mimesis Edizioni (Italiano)" + }, + { + "slug": "mind-and-language", + "label": "Mind & Language" + }, + { + "slug": "mineralogical-magazine", + "label": "Mineralogical Magazine" + }, + { + "slug": "mis-quarterly", + "label": "MIS Quarterly" + }, + { + "slug": "modern-chinese-literature-and-culture", + "label": "Modern Chinese Literature and Culture" + }, + { + "slug": "modern-humanities-research-association-author-date", + "label": "Modern Humanities Research Association 3rd edition (author-date)" + }, + { + "slug": "modern-humanities-research-association", + "label": "Modern Humanities Research Association 3rd edition (note with bibliography)" + }, + { + "slug": "modern-language-association-6th-edition-note", + "label": "Modern Language Association 6th edition (note)" + }, + { + "slug": "modern-language-association-7th-edition-underline", + "label": "Modern Language Association 7th edition (underline)" + }, + { + "slug": "modern-language-association-7th-edition-with-url", + "label": "Modern Language Association 7th edition (with URL)" + }, + { + "slug": "modern-language-association-7th-edition", + "label": "Modern Language Association 7th edition" + }, + { + "slug": "modern-language-association-8th-edition", + "label": "Modern Language Association 8th edition" + }, + { + "slug": "modern-language-association", + "label": "Modern Language Association 9th edition" + }, + { + "slug": "modern-pathology", + "label": "Modern Pathology" + }, + { + "slug": "modern-phytomorphology", + "label": "Modern Phytomorphology" + }, + { + "slug": "mohr-siebeck-recht", + "label": "Mohr Siebeck - Recht (Deutsch - Österreich)" + }, + { + "slug": "molecular-and-cellular-proteomics", + "label": "Molecular & Cellular Proteomics" + }, + { + "slug": "molecular-biology-and-evolution", + "label": "Molecular Biology and Evolution" + }, + { + "slug": "molecular-biology-of-the-cell", + "label": "Molecular Biology of the Cell" + }, + { + "slug": "molecular-biology", + "label": "Molecular Biology" + }, + { + "slug": "molecular-metabolism", + "label": "Molecular Metabolism" + }, + { + "slug": "molecular-microbiology", + "label": "Molecular Microbiology" + }, + { + "slug": "molecular-nutrition-and-food-research", + "label": "Molecular Nutrition & Food Research" + }, + { + "slug": "molecular-oncology", + "label": "Molecular Oncology" + }, + { + "slug": "molecular-plant-microbe-interactions", + "label": "Molecular Plant-Microbe Interactions" + }, + { + "slug": "molecular-plant-pathology", + "label": "Molecular Plant Pathology" + }, + { + "slug": "molecular-plant", + "label": "Molecular Plant" + }, + { + "slug": "molecular-psychiatry-letters", + "label": "Molecular Psychiatry (letters to the editor)" + }, + { + "slug": "molecular-psychiatry", + "label": "Molecular Psychiatry" + }, + { + "slug": "monash-university-csiro", + "label": "Monash University - CSIRO" + }, + { + "slug": "mondes-en-developpement", + "label": "Mondes en développement (Français)" + }, + { + "slug": "monographs-of-the-palaeontographical-society", + "label": "Monographs of the Palaeontographical Society" + }, + { + "slug": "moorlands-college", + "label": "Moorlands College" + }, + { + "slug": "mots", + "label": "Mots (French)" + }, + { + "slug": "mrs-bulletin", + "label": "MRS Bulletin" + }, + { + "slug": "multidisciplinary-digital-publishing-institute", + "label": "Multidisciplinary Digital Publishing Institute" + }, + { + "slug": "multilingual-matters", + "label": "Multilingual Matters" + }, + { + "slug": "multimed", + "label": "Multimed (Español)" + }, + { + "slug": "multiple-sclerosis-journal", + "label": "Multiple Sclerosis Journal" + }, + { + "slug": "muscle-and-nerve", + "label": "Muscle & Nerve" + }, + { + "slug": "museum-national-dhistoire-naturelle", + "label": "Muséum national d'Histoire naturelle" + }, + { + "slug": "music-theory-spectrum", + "label": "Music Theory Spectrum" + }, + { + "slug": "mutagenesis", + "label": "Mutagenesis" + }, + { + "slug": "mycobiology", + "label": "Mycobiology" + }, + { + "slug": "mycologia", + "label": "Mycologia" + }, + { + "slug": "myrmecological-news", + "label": "Myrmecological News" + }, + { + "slug": "nano-biomedicine-and-engineering", + "label": "Nano Biomedicine and Engineering" + }, + { + "slug": "natbib-plainnat-author-date", + "label": "natbib - plainnat (author-date)" + }, + { + "slug": "national-archives-of-australia", + "label": "National Archives of Australia" + }, + { + "slug": "national-institute-of-health-research", + "label": "National Institute of Health Research" + }, + { + "slug": "national-institute-of-organisation-dynamics-australia-harvard", + "label": "National Institute of Organisation Dynamics Australia - Harvard" + }, + { + "slug": "national-institute-of-technology-karnataka", + "label": "National Institute of Technology Karnataka" + }, + { + "slug": "national-institute-of-technology-tiruchirappalli", + "label": "National Institute of Technology, Tiruchirappalli" + }, + { + "slug": "national-library-of-medicine-grant-proposals", + "label": "National Library of Medicine (grant proposals with PMCID/PMID)" + }, + { + "slug": "national-marine-fisheries-service-national-environmental-policy-act", + "label": "National Marine Fisheries Service - National Environmental Policy Act" + }, + { + "slug": "national-natural-science-foundation-of-china", + "label": "National Natural Science Foundation of China (中文)" + }, + { + "slug": "national-science-foundation-grant-proposals", + "label": "National Science Foundation (grant proposals)" + }, + { + "slug": "national-university-of-singapore-department-of-geography-harvard", + "label": "National University of Singapore - Department of Geography - Harvard" + }, + { + "slug": "nations-and-nationalism", + "label": "Nations and Nationalism" + }, + { + "slug": "natur-und-landschaft", + "label": "Natur und Landschaft (Deutsch)" + }, + { + "slug": "natura-croatica", + "label": "Natura Croatica" + }, + { + "slug": "nature-neuroscience-brief-communications", + "label": "Nature Neuroscience (brief communications)" + }, + { + "slug": "nature-no-et-al", + "label": "Nature (no \"et al.\")" + }, + { + "slug": "nature-no-superscript", + "label": "Nature (no superscript)" + }, + { + "slug": "nature-publishing-group-vancouver", + "label": "Nature Publishing Group - Vancouver" + }, + { + "slug": "nature", + "label": "Nature" + }, + { + "slug": "natures-sciences-societes", + "label": "Natures Sciences Sociétés" + }, + { + "slug": "nauplius", + "label": "Nauplius" + }, + { + "slug": "navigation", + "label": "Navigation" + }, + { + "slug": "nccr-mediality", + "label": "NCCR Mediality. Medienwandel - Medienwechsel - Medienwissen (Deutsch)" + }, + { + "slug": "necmettin-erbakan-universitesi-fen-ve-muhendislik-bilimleri-dergisi", + "label": "Necmettin Erbakan Üniversitesi Fen ve Mühendislik Bilimleri Dergisi (Türkçe)" + }, + { + "slug": "nehet", + "label": "NeHeT (Français)" + }, + { + "slug": "nejm-catalyst-innovations-in-care-delivery", + "label": "NEJM Catalyst Innovations in Care Delivery" + }, + { + "slug": "nephrology-dialysis-transplantation", + "label": "Nephrology Dialysis Transplantation" + }, + { + "slug": "netherlands-journal-of-geosciences-geologie-en-mijnbouw", + "label": "Netherlands Journal of Geosciences - Geologie en Mijnbouw" + }, + { + "slug": "neue-juristische-wochenschrift", + "label": "Neue Juristische Wochenschrift (Deutsch)" + }, + { + "slug": "neue-kriminalpolitik", + "label": "Neue Kriminalpolitik (Deutsch)" + }, + { + "slug": "neural-plasticity", + "label": "Neural Plasticity" + }, + { + "slug": "neuroendocrinology-letters", + "label": "Neuroendocrinology Letters" + }, + { + "slug": "neuroimaging-clinics-of-north-america", + "label": "Neuroimaging Clinics of North America" + }, + { + "slug": "neurologia-argentina", + "label": "Neurología Argentina (Español)" + }, + { + "slug": "neurologia", + "label": "Neurología (Español)" + }, + { + "slug": "neurology-india", + "label": "Neurology India" + }, + { + "slug": "neurology", + "label": "Neurology" + }, + { + "slug": "neuropsychopharmacology", + "label": "Neuropsychopharmacology" + }, + { + "slug": "neurorehabilitation-and-neural-repair", + "label": "Neurorehabilitation and Neural Repair" + }, + { + "slug": "neuroreport", + "label": "NeuroReport" + }, + { + "slug": "neurospine", + "label": "Neurospine" + }, + { + "slug": "neurosurgery-clinics-of-north-america", + "label": "Neurosurgery Clinics of North America" + }, + { + "slug": "new-harts-rules-the-oxford-style-guide-author-date", + "label": "New Hart's Rules: The Oxford Style Guide (author-date)" + }, + { + "slug": "new-harts-rules-the-oxford-style-guide", + "label": "New Hart's Rules: The Oxford Style Guide" + }, + { + "slug": "new-phytologist", + "label": "New Phytologist" + }, + { + "slug": "new-solutions", + "label": "New Solutions" + }, + { + "slug": "new-testament-studies", + "label": "New Testament Studies" + }, + { + "slug": "new-zealand-dental-journal", + "label": "New Zealand Dental Journal" + }, + { + "slug": "new-zealand-journal-of-forestry-science", + "label": "New Zealand Journal of Forestry Science" + }, + { + "slug": "new-zealand-journal-of-history", + "label": "New Zealand Journal of History" + }, + { + "slug": "new-zealand-plant-protection", + "label": "New Zealand Plant Protection" + }, + { + "slug": "new-zealand-veterinary-journal", + "label": "New Zealand Veterinary Journal" + }, + { + "slug": "nist-technical-publication-journal-of-research-of-nist", + "label": "NIST Technical Publications - Journal of Research of NIST" + }, + { + "slug": "nordic-pulp-and-paper-research-journal", + "label": "Nordic Pulp & Paper Research Journal" + }, + { + "slug": "norma-portuguesa-405", + "label": "Norma Portuguesa 405 (Português)" + }, + { + "slug": "norois", + "label": "Norois (Français)" + }, + { + "slug": "norsk-apa-manual-note", + "label": "Norsk APA-manual - APA 7th edition (note)" + }, + { + "slug": "norsk-apa-manual", + "label": "Norsk APA-manual - APA 7th edition (author-date)" + }, + { + "slug": "norsk-henvisningsstandard-for-rettsvitenskapelige-tekster", + "label": "Norsk henvisningsstandard for rettsvitenskapelige tekster (Norsk - Bokmål)" + }, + { + "slug": "north-pacific-anadromous-fish-commission-bulletin", + "label": "North Pacific Anadromous Fish Commission Bulletin" + }, + { + "slug": "northeastern-naturalist", + "label": "Northeastern Naturalist" + }, + { + "slug": "nottingham-trent-university-library-harvard", + "label": "Nottingham Trent University Library - Harvard" + }, + { + "slug": "nouvelles-perspectives-en-sciences-sociales", + "label": "Nouvelles perspectives en sciences sociales (Français - Canada)" + }, + { + "slug": "novasinergia", + "label": "Novasinergia" + }, + { + "slug": "nowa-audiofonologia", + "label": "Nowa Audiofonologia (Polski)" + }, + { + "slug": "nuclear-receptor-signaling", + "label": "Nuclear Receptor Signaling" + }, + { + "slug": "nucleic-acids-research-web-server-issue", + "label": "Nucleic Acids Research - Web Server Issue" + }, + { + "slug": "nucleic-acids-research", + "label": "Nucleic Acids Research" + }, + { + "slug": "nutrition-research-reviews", + "label": "Nutrition Research Reviews" + }, + { + "slug": "nys-nydanske-sprogstudier", + "label": "NyS - Nydanske Sprogstudier (Dansk)" + }, + { + "slug": "obafemi-awolowo-university-faculty-of-technology", + "label": "Obafemi Awolowo University - Faculty of Technology" + }, + { + "slug": "obesity", + "label": "Obesity" + }, + { + "slug": "obstetrics-and-gynecology-science", + "label": "Obstetrics & Gynecology Science" + }, + { + "slug": "occupational-medicine", + "label": "Occupational Medicine" + }, + { + "slug": "ocean-and-coastal-research", + "label": "Ocean and Coastal Research" + }, + { + "slug": "oceanography", + "label": "Oceanography" + }, + { + "slug": "oecologia-australis", + "label": "Oecologia Australis" + }, + { + "slug": "offa", + "label": "Offa - Berichte und Mitteilungen zur Archäologie" + }, + { + "slug": "oikos", + "label": "Oikos" + }, + { + "slug": "oil-shale", + "label": "Oil Shale" + }, + { + "slug": "oncoimmunology", + "label": "OncoImmunology" + }, + { + "slug": "oncotarget", + "label": "Oncotarget" + }, + { + "slug": "open-gender-journal", + "label": "Open Gender Journal" + }, + { + "slug": "open-window", + "label": "Open Window - Harvard" + }, + { + "slug": "operative-dentistry", + "label": "Operative Dentistry" + }, + { + "slug": "ophthalmic-genetics", + "label": "Ophthalmic Genetics" + }, + { + "slug": "ophthalmology-retina", + "label": "Ophthalmology Retina" + }, + { + "slug": "ophthalmology", + "label": "Ophthalmology" + }, + { + "slug": "optics-express", + "label": "Optics Express" + }, + { + "slug": "optics-letters", + "label": "Optics Letters" + }, + { + "slug": "opto-electronic-advances", + "label": "Opto-Electronic Advances" + }, + { + "slug": "optometry-and-vision-science", + "label": "Optometry & Vision Science" + }, + { + "slug": "opuscula", + "label": "Opuscula" + }, + { + "slug": "oral-diseases", + "label": "Oral Diseases" + }, + { + "slug": "organic-geochemistry", + "label": "Organic Geochemistry" + }, + { + "slug": "organised-sound", + "label": "Organised Sound" + }, + { + "slug": "organization-studies", + "label": "Organization Studies" + }, + { + "slug": "organization", + "label": "Organization" + }, + { + "slug": "organon", + "label": "Organon" + }, + { + "slug": "ornitologia-neotropical", + "label": "Ornitología Neotropical" + }, + { + "slug": "orthopedic-clinics-of-north-america", + "label": "Orthopedic Clinics of North America" + }, + { + "slug": "oryx", + "label": "Oryx" + }, + { + "slug": "oscola-no-ibid", + "label": "OSCOLA (Oxford University Standard for Citation of Legal Authorities) (no Ibid.)" + }, + { + "slug": "oscola", + "label": "OSCOLA (Oxford University Standard for Citation of Legal Authorities)" + }, + { + "slug": "osterreichische-zeitschrift-fur-politikwissenschaft", + "label": "Österreichische Zeitschrift für Politikwissenschaft (Deutsch - Österreich)" + }, + { + "slug": "otto-von-guricke-universitat-magdeburg-medizinische-fakultat-numeric", + "label": "Otto-von-Guericke-Universität Magdeburg - Medizinische Fakultät (numeric)" + }, + { + "slug": "owbarth-verlag", + "label": "O.W. Barth Verlag (Deutsch)" + }, + { + "slug": "oxford-art-journal", + "label": "Oxford Art Journal" + }, + { + "slug": "oxford-centre-for-mission-studies-harvard", + "label": "Oxford Centre for Mission Studies - Harvard" + }, + { + "slug": "oxford-studies-in-ancient-philosophy", + "label": "Oxford Studies in Ancient Philosophy" + }, + { + "slug": "oxford-studies-on-the-roman-economy", + "label": "Oxford Studies on the Roman Economy" + }, + { + "slug": "oxford-the-university-of-new-south-wales", + "label": "The University of New South Wales - Oxford" + }, + { + "slug": "oxford-university-press-humsoc", + "label": "Oxford University Press HUMSOC" + }, + { + "slug": "oxford-university-press-note", + "label": "Oxford University Press (note)" + }, + { + "slug": "oxford-university-press-scimed-author-date", + "label": "Oxford University Press SciMed (author-date)" + }, + { + "slug": "oxford-university-press-scimed-numeric", + "label": "Oxford University Press SciMed (numeric)" + }, + { + "slug": "oxidation-of-metals", + "label": "Oxidation of Metals" + }, + { + "slug": "pacific-conservation-biology", + "label": "Pacific Conservation Biology" + }, + { + "slug": "pacific-science", + "label": "Pacific Science" + }, + { + "slug": "padagogische-hochschule-bern-institut-vorschulstufe-und-primarstufe", + "label": "Pädagogische Hochschule Bern - Institut Vorschulstufe und Primarstufe" + }, + { + "slug": "padagogische-hochschule-fachhochschule-nordwestschweiz", + "label": "Pädagogische Hochschule Fachhochschule Nordwestschweiz (Deutsch - Schweiz)" + }, + { + "slug": "padagogische-hochschule-heidelberg", + "label": "Pädagogische Hochschule Heidelberg (Deutsch)" + }, + { + "slug": "padagogische-hochschule-vorarlberg", + "label": "Pädagogische Hochschule Vorarlberg (Deutsch)" + }, + { + "slug": "paediatric-and-perinatal-epidemiology", + "label": "Paediatric and Perinatal Epidemiology" + }, + { + "slug": "pain-medicine", + "label": "Pain Medicine" + }, + { + "slug": "pain", + "label": "PAIN" + }, + { + "slug": "pakistan-journal-of-agricultural-sciences", + "label": "Pakistan Journal of Agricultural Sciences" + }, + { + "slug": "pakistani-veterinary-journal", + "label": "Pakistan Veterinary Journal" + }, + { + "slug": "palaeodiversity", + "label": "Palaeodiversity" + }, + { + "slug": "palaeontographica-abteilung-b-palaeobotany-palaeophytology", + "label": "Palaeontographica Abteilung B: Palaeobotany - Palaeophytology" + }, + { + "slug": "palaeontologia-electronica", + "label": "Palaeontologia Electronica" + }, + { + "slug": "palaeontology", + "label": "Palaeontology" + }, + { + "slug": "palaeovertebrata", + "label": "Palaeovertebrata" + }, + { + "slug": "palaios", + "label": "Palaios" + }, + { + "slug": "paleobiology", + "label": "Paleobiology" + }, + { + "slug": "pallas", + "label": "Pallas (French)" + }, + { + "slug": "parasite", + "label": "Parasite" + }, + { + "slug": "parasitology", + "label": "Parasitology" + }, + { + "slug": "past-and-present", + "label": "Past & Present" + }, + { + "slug": "pediatric-allergy-and-immunology", + "label": "Pediatric Allergy and Immunology" + }, + { + "slug": "pediatric-anesthesia", + "label": "Pediatric Anesthesia" + }, + { + "slug": "pediatric-blood-and-cancer", + "label": "Pediatric Blood & Cancer" + }, + { + "slug": "pediatric-infectious-disease-journal", + "label": "Pediatric Infectious Disease Journal" + }, + { + "slug": "pediatric-physical-therapy", + "label": "Pediatric Physical Therapy" + }, + { + "slug": "pediatric-practice-and-research", + "label": "Pediatric Practice and Research" + }, + { + "slug": "pediatric-pulmonology", + "label": "Pediatric Pulmonology" + }, + { + "slug": "pediatric-research", + "label": "Pediatric Research" + }, + { + "slug": "pediatric-urology-case-reports", + "label": "Pediatric Urology Case Reports" + }, + { + "slug": "pedosphere", + "label": "Pedosphere" + }, + { + "slug": "peerj", + "label": "PeerJ" + }, + { + "slug": "pensoft-journals", + "label": "Pensoft Journals" + }, + { + "slug": "periodicum-biologorum", + "label": "Periodicum Biologorum" + }, + { + "slug": "periodontology-2000", + "label": "Periodontology 2000" + }, + { + "slug": "permafrost-and-periglacial-processes", + "label": "Permafrost and Periglacial Processes" + }, + { + "slug": "perspectives-on-sexual-and-reproductive-health", + "label": "Perspectives on Sexual and Reproductive Health" + }, + { + "slug": "pesquisa-agropecuaria-brasileira", + "label": "Pesquisa Agropecuária Brasileira (Português - Brasil)" + }, + { + "slug": "pest-management-science", + "label": "Pest Management Science" + }, + { + "slug": "petit-chicago-author-date", + "label": "Petit Chicago (author-date, Français - Canada)" + }, + { + "slug": "pharmacoepidemiology-and-drug-safety", + "label": "Pharmacoepidemiology and Drug Safety" + }, + { + "slug": "philippika", + "label": "Philippika (Deutsch)" + }, + { + "slug": "philipps-universitat-marburg-note", + "label": "Philipps-Universität Marburg - Erziehungswissenschaften (note, Deutsch)" + }, + { + "slug": "philosophia-scientiae", + "label": "Philosophia Scientiæ" + }, + { + "slug": "philosophiques", + "label": "Philosophiques (Français)" + }, + { + "slug": "philosophy-and-public-affairs", + "label": "Philosophy & Public Affairs" + }, + { + "slug": "photochemistry-and-photobiology", + "label": "Photochemistry and Photobiology" + }, + { + "slug": "photosynthetica", + "label": "Photosynthetica" + }, + { + "slug": "phycological-research", + "label": "Phycological Research" + }, + { + "slug": "phyllomedusa", + "label": "Phyllomedusa" + }, + { + "slug": "physiologia-plantarum", + "label": "Physiologia Plantarum" + }, + { + "slug": "physiological-and-biochemical-zoology", + "label": "Physiological and Biochemical Zoology" + }, + { + "slug": "physiotherapy-theory-and-practice", + "label": "Physiotherapy Theory and Practice" + }, + { + "slug": "phytopathologia-mediterranea", + "label": "Phytopathologia Mediterranea" + }, + { + "slug": "phytotaxa", + "label": "Phytotaxa" + }, + { + "slug": "pisa-university-press", + "label": "Pisa University Press" + }, + { + "slug": "planning-practice-and-research", + "label": "Planning Practice & Research" + }, + { + "slug": "plant-and-cell-physiology", + "label": "Plant & Cell Physiology" + }, + { + "slug": "plant-biology", + "label": "Plant Biology" + }, + { + "slug": "plant-biotechnology-journal", + "label": "Plant Biotechnology Journal" + }, + { + "slug": "plant-cell-and-environment", + "label": "Plant, Cell & Environment" + }, + { + "slug": "plant-genetic-resources-characterization-and-utilization", + "label": "Plant Genetic Resources - Characterization and Utilization" + }, + { + "slug": "plant-pathology", + "label": "Plant Pathology" + }, + { + "slug": "plant-physiology", + "label": "Plant Physiology" + }, + { + "slug": "plant-species-biology", + "label": "Plant Species Biology" + }, + { + "slug": "plos", + "label": "Public Library of Science" + }, + { + "slug": "pnas", + "label": "Proceedings of the National Academy of Sciences of the United States of America" + }, + { + "slug": "podzemna-voda", + "label": "Podzemná voda (Slovenčina)" + }, + { + "slug": "polar-research", + "label": "Polar Research" + }, + { + "slug": "polish-archives-of-internal-medicine", + "label": "Polish Archives of Internal Medicine" + }, + { + "slug": "polish-legal", + "label": "Polish Legal (Polski)" + }, + { + "slug": "politeknik-negeri-manado-jurnal-p3m", + "label": "Politeknik Negeri Manado - Jurnal Pusat Penelitian dan Pengabdian Kepada Masyarakat (Bahasa Indonesia)" + }, + { + "slug": "political-studies", + "label": "Political Studies" + }, + { + "slug": "politique-europeenne", + "label": "Politique Européenne" + }, + { + "slug": "politische-vierteljahresschrift", + "label": "Politische Vierteljahresschrift (Deutsch)" + }, + { + "slug": "politix", + "label": "Politix (Français)" + }, + { + "slug": "polygraphia", + "label": "Polygraphia (Italiano)" + }, + { + "slug": "polymer-reviews", + "label": "Polymer Reviews" + }, + { + "slug": "pontifical-athenaeum-regina-apostolorum", + "label": "Pontifical Athenaeum Regina Apostolorum" + }, + { + "slug": "pontifical-biblical-institute", + "label": "Pontifical Biblical Institute" + }, + { + "slug": "pontifical-gregorian-university", + "label": "Pontifical Gregorian University (Italiano)" + }, + { + "slug": "population-space-and-place", + "label": "Population, Space and Place" + }, + { + "slug": "population", + "label": "Population (Français)" + }, + { + "slug": "postepy-higieny-i-medycyny-doswiadczalnej", + "label": "Postępy Higieny i Medycyny Doświadczalnej (Polski)" + }, + { + "slug": "poultry-science", + "label": "Poultry Science" + }, + { + "slug": "pour-reussir-note", + "label": "Pour Réussir de Dionne 6ème édition (note, Français - Canada)" + }, + { + "slug": "pravnik", + "label": "Právník (Čeština)" + }, + { + "slug": "praxis", + "label": "Praxis (Deutsch - Schweiz)" + }, + { + "slug": "prehistoires-mediterraneennes", + "label": "Préhistoires méditerranéennes" + }, + { + "slug": "prehospital-and-disaster-medicine", + "label": "Prehospital and Disaster Medicine" + }, + { + "slug": "prehospital-emergency-care", + "label": "Prehospital Emergency Care" + }, + { + "slug": "preslia", + "label": "Preslia - The Journal of the Czech Botanical Society" + }, + { + "slug": "presses-universitaires-de-paris-nanterre", + "label": "Presses universitaires de Paris Nanterre (note, Français)" + }, + { + "slug": "presses-universitaires-de-rennes-archeologie-et-culture", + "label": "Presses Universitaires de Rennes - Archéologie et Culture (Français)" + }, + { + "slug": "presses-universitaires-de-rennes", + "label": "Presses Universitaires de Rennes (Français)" + }, + { + "slug": "presses-universitaires-de-strasbourg-note", + "label": "Presses universitaires de Strasbourg (note, Français)" + }, + { + "slug": "primary-care-clinics-in-office-practice", + "label": "Primary Care: Clinics in Office Practice" + }, + { + "slug": "proceedings-of-the-estonian-academy-of-sciences-author-date", + "label": "Proceedings of the Estonian Academy of Sciences (author-date)" + }, + { + "slug": "proceedings-of-the-estonian-academy-of-sciences-numeric", + "label": "Proceedings of the Estonian Academy of Sciences (numeric)" + }, + { + "slug": "proceedings-of-the-joint-international-grassland-and-international-rangeland-congress-2021", + "label": "Proceedings of the Joint International Grassland & International Rangeland Congress 2021" + }, + { + "slug": "proceedings-of-the-royal-society-b", + "label": "Proceedings of the Royal Society B" + }, + { + "slug": "processing-and-application-of-ceramics", + "label": "Processing and Application of Ceramics" + }, + { + "slug": "production-and-operations-management", + "label": "Production and Operations Management" + }, + { + "slug": "proinflow", + "label": "ProInflow (note, Čeština)" + }, + { + "slug": "protein-engineering-design-and-selection", + "label": "Protein Engineering Design and Selection" + }, + { + "slug": "protein-science", + "label": "Protein Science" + }, + { + "slug": "proteomics", + "label": "PROTEOMICS" + }, + { + "slug": "psychiatric-clinics-of-north-america", + "label": "Psychiatric Clinics of North America" + }, + { + "slug": "psychiatric-services", + "label": "Psychiatric Services" + }, + { + "slug": "psychiatry-and-clinical-neurosciences", + "label": "Psychiatry and Clinical Neurosciences" + }, + { + "slug": "psychosomatic-medicine", + "label": "Psychosomatic Medicine" + }, + { + "slug": "psychosomatics", + "label": "Psychosomatics" + }, + { + "slug": "public-health-nutrition", + "label": "Public Health Nutrition" + }, + { + "slug": "publicatiewijzer-voor-de-archeologie", + "label": "Publicatiewijzer voor de Archeologie (Nederlands)" + }, + { + "slug": "pure-and-applied-geophysics", + "label": "Pure and Applied Geophysics" + }, + { + "slug": "qeios", + "label": "Qeios" + }, + { + "slug": "quaderni-degli-avogadro-colloquia", + "label": "Quaderni degli Avogadro Colloquia" + }, + { + "slug": "quaderni-materialisti", + "label": "Quaderni Materialisti (Italiano)" + }, + { + "slug": "quaderni", + "label": "Quaderni (Italiano)" + }, + { + "slug": "quaternaire", + "label": "Quaternaire (Français)" + }, + { + "slug": "quaternary-international", + "label": "Quaternary International" + }, + { + "slug": "queen-margaret-university-harvard", + "label": "Queen Margaret University - Harvard" + }, + { + "slug": "r-and-d-management", + "label": "R&D Management" + }, + { + "slug": "radiation-protection-dosimetry", + "label": "Radiation Protection Dosimetry" + }, + { + "slug": "radiochimica-acta", + "label": "Radiochimica Acta" + }, + { + "slug": "radiographics", + "label": "RadioGraphics" + }, + { + "slug": "radiography", + "label": "Radiography" + }, + { + "slug": "radiologic-clinics-of-north-america", + "label": "Radiologic Clinics of North America" + }, + { + "slug": "radiology", + "label": "Radiology" + }, + { + "slug": "radiopaedia", + "label": "Radiopaedia.org" + }, + { + "slug": "raffles-bulletin-of-zoology", + "label": "Raffles Bulletin of Zoology" + }, + { + "slug": "raptor-journal", + "label": "Raptor Journal" + }, + { + "slug": "rassegna-degli-archivi-di-stato-bibliografia-generale", + "label": "Rassegna degli Archivi di Stato (bibliografia generale o ragionata commentata, sorted chronological, italiano)" + }, + { + "slug": "rassegna-degli-archivi-di-stato", + "label": "Rassegna degli Archivi di Stato (citazioni estese, italiano)" + }, + { + "slug": "recent-patents-on-drug-delivery-and-formulation", + "label": "Recent Patents on Drug Delivery & Formulation" + }, + { + "slug": "recherches-en-sciences-de-gestion", + "label": "Recherches en Sciences de Gestion (Français)" + }, + { + "slug": "refugee-survey-quarterly", + "label": "Refugee Survey Quarterly" + }, + { + "slug": "register-studies", + "label": "Register Studies" + }, + { + "slug": "religion-in-the-roman-empire", + "label": "Religion in the Roman Empire" + }, + { + "slug": "renewable-agriculture-and-food-systems", + "label": "Renewable Agriculture and Food Systems" + }, + { + "slug": "reports-of-practical-oncology-and-radiotherapy", + "label": "Reports of Practical Oncology and Radiotherapy" + }, + { + "slug": "representation", + "label": "Representation" + }, + { + "slug": "reproduction-fertility-and-development", + "label": "Reproduction, Fertility and Development" + }, + { + "slug": "reproduction", + "label": "Reproduction" + }, + { + "slug": "research-and-education-promotion-association", + "label": "Research and Education Promotion Association" + }, + { + "slug": "research-in-plant-disease", + "label": "Research in Plant Disease" + }, + { + "slug": "research-institute-for-nature-and-forest", + "label": "Research Institute for Nature and Forest (Instituut voor Natuur- en Bosonderzoek)" + }, + { + "slug": "research-on-biomedical-engineering", + "label": "Research on Biomedical Engineering" + }, + { + "slug": "respiratory-care-journal", + "label": "Respiratory Care Journal" + }, + { + "slug": "restoration-ecology", + "label": "Restoration Ecology" + }, + { + "slug": "retina", + "label": "Retina" + }, + { + "slug": "rever-revista-de-estudos-da-religiao", + "label": "REVER - Revista de Estudos da Religião" + }, + { + "slug": "review-of-international-studies", + "label": "Review of International Studies" + }, + { + "slug": "review-of-political-economy", + "label": "Review of Political Economy" + }, + { + "slug": "reviews-of-modern-physics-with-titles", + "label": "Reviews of Modern Physics (with titles)" + }, + { + "slug": "revista-argentina-de-antropologia-biologica", + "label": "Revista Argentina de Antropologia Biologica (Español)" + }, + { + "slug": "revista-biblica", + "label": "Revista Bíblica (Español)" + }, + { + "slug": "revista-brasileira-de-ciencia-do-solo", + "label": "Revista Brasileira de Ciência do Solo" + }, + { + "slug": "revista-chilena-de-derecho-y-tecnologia", + "label": "Revista Chilena de Derecho y Tecnología (Español - Chile)" + }, + { + "slug": "revista-ciencias-tecnicas-agropecuarias", + "label": "Revista Ciencias Técnicas Agropecuarias (Español)" + }, + { + "slug": "revista-cubana-de-meteorologia", + "label": "Revista Cubana de Meteorologia" + }, + { + "slug": "revista-da-sociedade-brasileira-de-medicina-tropical", + "label": "Revista da Sociedade Brasileira de Medicina Tropical" + }, + { + "slug": "revista-de-biologia-marina-y-oceanografia", + "label": "Revista de Biología Marina y Oceanografía" + }, + { + "slug": "revista-de-biologia-tropical", + "label": "Revista de Biología Tropical (International Journal of Tropical Biology and Conservation)" + }, + { + "slug": "revista-de-filologia-espanola", + "label": "Revista de Filología Española (Español)" + }, + { + "slug": "revista-do-instituto-de-medicina-tropical-de-sao-paulo", + "label": "Revista do Instituto de Medicina Tropical de São Paulo" + }, + { + "slug": "revista-espanola-de-nutricion-humana-y-dietetica", + "label": "Revista Espanola de Nutricion Humana y Dietetica (Español)" + }, + { + "slug": "revista-fave-seccion-ciencias-agrarias", + "label": "Revista FAVE - Sección Ciencias Agrarias (Español)" + }, + { + "slug": "revista-ladinia", + "label": "Revista Ladinia" + }, + { + "slug": "revista-latinoamericana-de-metalurgia-y-materiales", + "label": "Revista Latinoamericana de Metalurgia y Materiales" + }, + { + "slug": "revista-latinoamericana-de-recursos-naturales", + "label": "Revista Latinoamericana de Recursos Naturales" + }, + { + "slug": "revista-materia", + "label": "Revista Matéria" + }, + { + "slug": "revista-noesis", + "label": "Revista Nóesis" + }, + { + "slug": "revista-peruana-de-medicina-experimental-y-salud-publica", + "label": "Revista Peruana de Medicina Experimental y Salud Pública (Español)" + }, + { + "slug": "revista-portuguesa-de-arqueologia", + "label": "Revista Portuguesa de Arqueologia" + }, + { + "slug": "revista-virtual-de-quimica", + "label": "Revista Virtual de Química (Português - Brasil)" + }, + { + "slug": "revue-archeologique-de-lest", + "label": "Revue archéologique de l’Est (Français)" + }, + { + "slug": "revue-archeologique-de-narbonnaise", + "label": "Revue archéologique de Narbonnaise (French)" + }, + { + "slug": "revue-archeologique-du-centre-de-la-france", + "label": "Revue archéologique du Centre de la France (Français)" + }, + { + "slug": "revue-archeologique", + "label": "Revue Archéologique (Français)" + }, + { + "slug": "revue-d-elevage-et-de-medecine-veterinaire-des-pays-tropicaux", + "label": "Revue d'élevage et de médecine vétérinaire des pays tropicaux (Français)" + }, + { + "slug": "revue-de-medecine-veterinaire", + "label": "Revue de Médecine Vétérinaire (Français)" + }, + { + "slug": "revue-de-qumran", + "label": "Revue de Qumrân" + }, + { + "slug": "revue-des-etudes-byzantines", + "label": "Revue des Études Byzantines" + }, + { + "slug": "revue-des-nouvelles-technologies-de-l-information", + "label": "Revue des Nouvelles Technologies de l'Information (Français)" + }, + { + "slug": "revue-dhistoire-des-sciences-humaines", + "label": "Revue d'histoire des sciences humaines (Français)" + }, + { + "slug": "revue-dhistoire-moderne-et-contemporaine", + "label": "Revue d'histoire moderne et contemporaine (Français)" + }, + { + "slug": "revue-europeenne-des-migrations-internationales", + "label": "Revue Européenne des Migrations Internationales" + }, + { + "slug": "revue-forestiere-francaise", + "label": "Revue forestière française (Français)" + }, + { + "slug": "revue-francaise-d-administration-publique", + "label": "Revue française d'administration publique (Français)" + }, + { + "slug": "revue-francaise-de-gestion", + "label": "Revue française de gestion (Français)" + }, + { + "slug": "revue-francaise-de-sociologie", + "label": "Revue française de sociologie (Français)" + }, + { + "slug": "revue-internationale-durbanisme", + "label": "Revue Internationale d'Urbanisme (Français)" + }, + { + "slug": "rhinology", + "label": "Rhinology" + }, + { + "slug": "rhodora", + "label": "Rhodora" + }, + { + "slug": "risk-analysis", + "label": "Risk Analysis" + }, + { + "slug": "ritid", + "label": "Ritið: tímarit Hugvísindastofnunar (Íslenska)" + }, + { + "slug": "rivista-italiana-di-paleontologia-e-stratigrafia", + "label": "Rivista Italiana di Paleontologia e Stratigrafia" + }, + { + "slug": "rmit-university-harvard", + "label": "RMIT University - Harvard" + }, + { + "slug": "rofo", + "label": "RöFo: Fortschritte auf dem Gebiet der Röntgenstrahlen und bildgebenden Verfahren" + }, + { + "slug": "romanian-humanities", + "label": "Romanian Humanities (Română)" + }, + { + "slug": "roots-monograph-series", + "label": "ROOTS monograph series" + }, + { + "slug": "rose-school", + "label": "ROSE School" + }, + { + "slug": "rossiiskii-fiziologicheskii-zhurnal-imeni-i-m-sechenova", + "label": "Российский физиологический журнал им. И.М. Сеченова (Ру́сский)" + }, + { + "slug": "royal-college-of-nursing-harvard", + "label": "Royal College of Nursing - Harvard" + }, + { + "slug": "royal-society-of-chemistry-with-titles", + "label": "Royal Society of Chemistry (with titles)" + }, + { + "slug": "royal-society-of-chemistry", + "label": "Royal Society of Chemistry" + }, + { + "slug": "rtf-scan", + "label": "RTF Scan" + }, + { + "slug": "ruhr-universitat-bochum-lehrstuhl-fur-industrial-sales-and-service-engineering", + "label": "Ruhr-Universität Bochum - Lehrstuhl für Industrial Sales and Service Engineering" + }, + { + "slug": "ruhr-universitat-bochum-medizinische-fakultat-numeric", + "label": "Ruhr-Universität Bochum - Medizinische Fakultät (numerisch, Deutsch)" + }, + { + "slug": "sage-harvard", + "label": "SAGE - Harvard" + }, + { + "slug": "sage-vancouver-brackets", + "label": "SAGE - Vancouver (brackets)" + }, + { + "slug": "sage-vancouver", + "label": "SAGE - Vancouver" + }, + { + "slug": "saglik-bilimleri-universitesi", + "label": "Sağlık Bilimleri Üniversitesi" + }, + { + "slug": "saint-paul-university-faculty-of-canon-law", + "label": "Saint Paul University - Faculty of Canon Law" + }, + { + "slug": "san-francisco-estuary-and-watershed-science", + "label": "San Francisco Estuary & Watershed Science" + }, + { + "slug": "sanamed", + "label": "Sanamed" + }, + { + "slug": "scandinavian-journal-of-infectious-diseases", + "label": "Scandinavian Journal of Infectious Diseases" + }, + { + "slug": "scandinavian-journal-of-information-systems", + "label": "Scandinavian Journal of Information Systems" + }, + { + "slug": "scandinavian-journal-of-medicine-and-science-in-sports", + "label": "Scandinavian Journal of Medicine & Science in Sports" + }, + { + "slug": "scandinavian-journal-of-rheumatology", + "label": "Scandinavian Journal of Rheumatology" + }, + { + "slug": "scandinavian-journal-of-work-environment-and-health", + "label": "Scandinavian Journal of Work, Environment & Health" + }, + { + "slug": "scandinavian-political-studies", + "label": "Scandinavian Political Studies" + }, + { + "slug": "science-and-technology-for-the-built-environment", + "label": "Science and Technology for the Built Environment" + }, + { + "slug": "science-china-chemistry", + "label": "Science China Chemistry" + }, + { + "slug": "science-china-earth-sciences", + "label": "SCIENCE CHINA Earth Sciences" + }, + { + "slug": "science-china-life-sciences", + "label": "SCIENCE CHINA Life Sciences" + }, + { + "slug": "science-china-materials", + "label": "SCIENCE CHINA Materials" + }, + { + "slug": "science-translational-medicine", + "label": "Science Translational Medicine" + }, + { + "slug": "science-without-titles", + "label": "Science (without titles)" + }, + { + "slug": "science", + "label": "Science" + }, + { + "slug": "scienceasia", + "label": "ScienceAsia" + }, + { + "slug": "sciences-po-ecole-doctorale-author-date", + "label": "Sciences Po - Ecole de la recherche (author-date, Français)" + }, + { + "slug": "sciences-po-ecole-doctorale-note-french", + "label": "Sciences Po - École de la recherche (note, Français)" + }, + { + "slug": "scientia-agriculturae-bohemica", + "label": "Scientia Agriculturae Bohemica" + }, + { + "slug": "scientia-iranica", + "label": "Scientia Iranica" + }, + { + "slug": "scientific-online-letters-on-the-atmosphere", + "label": "Scientific Online Letters on the Atmosphere" + }, + { + "slug": "scientific-review-engineering-and-environmental-sciences", + "label": "Scientific Review Engineering and Environmental Sciences (Przegląd Naukowy Inżynieria i Kształtowanie Środowiska)" + }, + { + "slug": "scrinium", + "label": "Scrinium" + }, + { + "slug": "sedimentology", + "label": "Sedimentology" + }, + { + "slug": "seed-science-and-technology", + "label": "Seed Science and Technology" + }, + { + "slug": "seed-science-research", + "label": "Seed Science Research" + }, + { + "slug": "seismological-research-letters", + "label": "Seismological Research Letters" + }, + { + "slug": "sekolah-tinggi-meteorologi-klimatologi-dan-geofisika", + "label": "Sekolah Tinggi Meteorologi Klimatologi dan Geofisika (Bahasa Indonesia)" + }, + { + "slug": "seminaire-saint-sulpice-ecole-theologie", + "label": "Séminaire Saint-Sulpice - Ecole Théologie (Français)" + }, + { + "slug": "seminars-in-pediatric-neurology", + "label": "Seminars in Pediatric Neurology" + }, + { + "slug": "serbian-archives-of-medicine", + "label": "Vancouver - Serbian Archives of Medicine" + }, + { + "slug": "serdica-journal-of-computing", + "label": "Serdica Journal of Computing" + }, + { + "slug": "service-medical-de-l-assurance-maladie", + "label": "Service Médical de l'Assurance Maladie (Français)" + }, + { + "slug": "sexual-development", + "label": "Sexual Development" + }, + { + "slug": "sexual-health", + "label": "Sexual Health" + }, + { + "slug": "sheffield-hallam-university-history", + "label": "Sheffield Hallam University - History" + }, + { + "slug": "shock", + "label": "Shock" + }, + { + "slug": "silva-fennica", + "label": "Silva Fennica" + }, + { + "slug": "sinergie-italian-journal-of-management", + "label": "Sinergie Italian Journal of Management" + }, + { + "slug": "sist02", + "label": "SIST02 (日本語)" + }, + { + "slug": "skene-journal-of-theatre-and-drama-studies", + "label": "Skenè. Journal of Theatre and Drama Studies" + }, + { + "slug": "slovensko-drustvo-za-medicinsko-informatiko", + "label": "Slovensko društvo za medicinsko informatiko" + }, + { + "slug": "small", + "label": "Small" + }, + { + "slug": "smithsonian-institution-scholarly-press-author-date", + "label": "Smithsonian Institution Scholarly Press (author-date)" + }, + { + "slug": "smithsonian-institution-scholarly-press-botany", + "label": "Smithsonian Institution Scholarly Press - Botany (author-date)" + }, + { + "slug": "smithsonian-institution-scholarly-press-note", + "label": "Smithsonian Institution Scholarly Press (note)" + }, + { + "slug": "smyrna-tip-dergisi", + "label": "Smyrna Tıp Dergisi (Türkçe)" + }, + { + "slug": "sn-computer-science", + "label": "SN Computer Science" + }, + { + "slug": "social-anthropology", + "label": "Social Anthropology/Anthropologie Sociale" + }, + { + "slug": "social-cognitive-and-affective-neuroscience", + "label": "Social Cognitive and Affective Neuroscience" + }, + { + "slug": "social-science-history", + "label": "Social Science History" + }, + { + "slug": "sociedade-brasileira-de-computacao", + "label": "Sociedade Brasileira de Computação" + }, + { + "slug": "societe-archeologique-de-bordeaux", + "label": "Société Archéologique de Bordeaux (Français)" + }, + { + "slug": "societe-francaise-detude-de-la-ceramique-antique-en-gaule", + "label": "Société Française d’Étude de la Céramique Antique en Gaule (Français)" + }, + { + "slug": "societe-nationale-des-groupements-techniques-veterinaires", + "label": "Société Nationale des Groupements Techniques Vétérinaires (Français)" + }, + { + "slug": "societes-contemporaines", + "label": "Sociétés Contemporaines" + }, + { + "slug": "society-for-american-archaeology", + "label": "Society for American Archaeology" + }, + { + "slug": "society-for-historical-archaeology", + "label": "Society for Historical Archaeology" + }, + { + "slug": "society-for-laboratory-automation-and-screening", + "label": "Society for Laboratory Automation and Screening" + }, + { + "slug": "society-of-automotive-engineers-technical-papers-numeric", + "label": "Society of Automotive Engineers Technical Papers (numeric)" + }, + { + "slug": "society-of-biblical-literature-1st-edition-fullnote-bibliography", + "label": "Society of Biblical Literature 1st edition (full note)" + }, + { + "slug": "society-of-biblical-literature-author-date", + "label": "Society of Biblical Literature 2nd edition (author-date)" + }, + { + "slug": "society-of-biblical-literature-fullnote-bibliography", + "label": "Society of Biblical Literature 2nd edition (full note)" + }, + { + "slug": "socio-economic-review", + "label": "Socio-Economic Review" + }, + { + "slug": "sociologia-ruralis", + "label": "Sociologia Ruralis" + }, + { + "slug": "sociologia-urbana-e-rurale", + "label": "Sociologia Urbana e Rurale (Italian)" + }, + { + "slug": "sociology-of-health-and-illness", + "label": "Sociology of Health & Illness" + }, + { + "slug": "sodertorns-hogskola-harvard-ibid", + "label": "Södertörns högskola - Harvard (with Ibid.)" + }, + { + "slug": "sodertorns-hogskola-harvard", + "label": "Södertörns högskola - Harvard" + }, + { + "slug": "sodertorns-hogskola-oxford", + "label": "Södertörns högskola - Oxford" + }, + { + "slug": "soil-biology-and-biochemistry", + "label": "Soil Biology and Biochemistry" + }, + { + "slug": "soil-science-and-plant-nutrition", + "label": "Soil Science and Plant Nutrition" + }, + { + "slug": "solent-university-harvard", + "label": "Solent University - Harvard" + }, + { + "slug": "solutions", + "label": "Solutions" + }, + { + "slug": "sorbonne-student-law-review", + "label": "Sorbonne Student Law Review - Revue juridique des étudiants de la Sorbonne" + }, + { + "slug": "south-african-actuarial-journal", + "label": "South African Actuarial Journal" + }, + { + "slug": "south-african-journal-of-animal-science", + "label": "South African Journal of Animal Science" + }, + { + "slug": "south-african-journal-of-enology-and-viticulture", + "label": "South African Journal of Enology and Viticulture" + }, + { + "slug": "south-african-journal-of-geology", + "label": "South African Journal of Geology" + }, + { + "slug": "south-african-law-journal", + "label": "South African Law Journal" + }, + { + "slug": "south-african-medical-journal", + "label": "South African Medical Journal" + }, + { + "slug": "south-african-theological-seminary", + "label": "South African Theological Seminary" + }, + { + "slug": "southeastern-geographer", + "label": "Southeastern Geographer" + }, + { + "slug": "southern-african-journal-of-critical-care", + "label": "Southern African Journal of Critical Care" + }, + { + "slug": "soziale-welt", + "label": "Soziale Welt (Deutsch)" + }, + { + "slug": "sozialpadagogisches-institut-berlin-walter-may", + "label": "Sozialpädagogisches Institut Berlin - Walter May (Deutsch)" + }, + { + "slug": "sozialwissenschaften-heilmann", + "label": "Sozialwissenschaften (Heilmann) (Deutsch)" + }, + { + "slug": "soziologie", + "label": "Soziologie (Deutsch)" + }, + { + "slug": "soziologiemagazin", + "label": "Soziologiemagazin (Deutsch)" + }, + { + "slug": "spandidos-publications", + "label": "Spandidos Publications" + }, + { + "slug": "spanish-legal", + "label": "Spanish Legal (Español)" + }, + { + "slug": "spectroscopy-letters", + "label": "Spectroscopy Letters" + }, + { + "slug": "speculum", + "label": "Speculum" + }, + { + "slug": "spie-bios", + "label": "SPIE BiOS" + }, + { + "slug": "spie-journals", + "label": "SPIE journals" + }, + { + "slug": "spie-proceedings", + "label": "SPIE Conference Proceedings" + }, + { + "slug": "spine", + "label": "Spine" + }, + { + "slug": "spip-cite", + "label": "SPIP - Cite plugin" + }, + { + "slug": "sports-health", + "label": "Sports Health" + }, + { + "slug": "springer-basic-author-date-no-et-al-with-issue", + "label": "Springer - Basic (author-date, no \"et al.\", with issue numbers)" + }, + { + "slug": "springer-basic-author-date-no-et-al", + "label": "Springer - Basic (author-date, no \"et al.\")" + }, + { + "slug": "springer-basic-author-date", + "label": "Springer - Basic (author-date)" + }, + { + "slug": "springer-basic-brackets-no-et-al-alphabetical", + "label": "Springer - Basic (numeric, brackets, no \"et al.\", alphabetical)" + }, + { + "slug": "springer-basic-brackets-no-et-al", + "label": "Springer - Basic (numeric, brackets, no \"et al.\")" + }, + { + "slug": "springer-basic-brackets", + "label": "Springer - Basic (numeric, brackets)" + }, + { + "slug": "springer-basic-note", + "label": "Springer - Basic (note)" + }, + { + "slug": "springer-fachzeitschriften-medizin-psychologie", + "label": "Springer - Fachzeitschriften Medizin Psychologie (Deutsch)" + }, + { + "slug": "springer-humanities-author-date", + "label": "Springer - Humanities (author-date)" + }, + { + "slug": "springer-humanities-brackets", + "label": "Springer - Humanities (numeric, brackets)" + }, + { + "slug": "springer-imis-series-migrationsgesellschaften", + "label": "Springer - IMIS Series Migrationsgesellschaften" + }, + { + "slug": "springer-lecture-notes-in-computer-science-alphabetical", + "label": "Springer - Lecture Notes in Computer Science (sorted alphabetically)" + }, + { + "slug": "springer-lecture-notes-in-computer-science", + "label": "Springer - Lecture Notes in Computer Science" + }, + { + "slug": "springer-mathphys-author-date", + "label": "Springer - MathPhys (author-date)" + }, + { + "slug": "springer-mathphys-brackets", + "label": "Springer - MathPhys (numeric, brackets)" + }, + { + "slug": "springer-physics-author-date", + "label": "Springer - Physics (author-date)" + }, + { + "slug": "springer-physics-brackets", + "label": "Springer - Physics (numeric, brackets)" + }, + { + "slug": "springer-socpsych-author-date", + "label": "Springer - SocPsych (author-date)" + }, + { + "slug": "springer-socpsych-brackets", + "label": "Springer - SocPsych (numeric, brackets)" + }, + { + "slug": "springer-vancouver-author-date", + "label": "Springer - Vancouver (author-date)" + }, + { + "slug": "springer-vancouver-brackets", + "label": "Springer - Vancouver (brackets)" + }, + { + "slug": "springer-vancouver", + "label": "Springer - Vancouver" + }, + { + "slug": "springer-vs-author-date", + "label": "Springer VS (author-date, Deutsch)" + }, + { + "slug": "springerprotocols", + "label": "SpringerProtocols" + }, + { + "slug": "st-patricks-college", + "label": "St Patrick's College" + }, + { + "slug": "stanovnistvo", + "label": "Stanovništvo" + }, + { + "slug": "statistika-statistics-and-economy-journal", + "label": "Statistika: Statistics and Economy Journal" + }, + { + "slug": "stavebni-obzor", + "label": "Stavební obzor (Čeština)" + }, + { + "slug": "steel-research-international", + "label": "Steel Research International" + }, + { + "slug": "steinbeis-hochschule-school-of-management-and-innovation", + "label": "Steinbeis-Hochschule - School of Management & Innovation (Deutsch)" + }, + { + "slug": "stellenbosch-law-review", + "label": "Stellenbosch Law Review" + }, + { + "slug": "stem-cell-reports", + "label": "Stem Cell Reports" + }, + { + "slug": "stem-cells", + "label": "Stem Cells" + }, + { + "slug": "strategic-design-research-journal", + "label": "Strategic Design Research Journal" + }, + { + "slug": "strategic-entrepreneurship-journal", + "label": "Strategic Entrepreneurship Journal" + }, + { + "slug": "strategic-management-journal", + "label": "Strategic Management Journal" + }, + { + "slug": "stroke", + "label": "Stroke" + }, + { + "slug": "structural-control-and-health-monitoring", + "label": "Structural Control and Health Monitoring" + }, + { + "slug": "studi-e-materiali-di-storia-delle-religioni", + "label": "Studi e materiali di storia delle religioni (Italiano)" + }, + { + "slug": "studi-slavistici-rivista-dellassociazione-italiana-degli-slavisti", + "label": "Studi Slavistici Rivista dell’Associazione Italiana degli Slavisti" + }, + { + "slug": "studia-bas", + "label": "Studia BAS (Polski)" + }, + { + "slug": "studies-in-the-history-of-gardens-and-designed-landscapes", + "label": "Studies in the History of Gardens & Designed Landscapes" + }, + { + "slug": "studii-teologice", + "label": "Studii Teologice" + }, + { + "slug": "stuttgart-media-university", + "label": "Hochschule der Medien Stuttgart (Deutsch)" + }, + { + "slug": "style-manual-australian-government-note", + "label": "Style Manual - Australian Government (note)" + }, + { + "slug": "style-manual-australian-government", + "label": "Style Manual - Australian Government (author-date)" + }, + { + "slug": "style-manual-for-authors-editors-and-printers-6th-edition-snooks-co", + "label": "Style manual for authors, editors and printers 6th edition (Snooks & Co.) (author-date)" + }, + { + "slug": "suburban-zeitschrift-fur-kritische-stadtforschung", + "label": "sub\\urban - Zeitschrift für kritische Stadtforschung (Deutsch)" + }, + { + "slug": "sunway-college-johor-bahru", + "label": "Sunway College Johor Bahru - Harvard" + }, + { + "slug": "suomen-antropologi-journal-of-the-finnish-anthropological-society", + "label": "Suomen antropologi: Journal of the Finnish Anthropological Society" + }, + { + "slug": "surgical-clinics-of-north-america", + "label": "Surgical Clinics of North America" + }, + { + "slug": "surgical-neurology-international", + "label": "Surgical Neurology International" + }, + { + "slug": "surgical-pathology-clinics", + "label": "Surgical Pathology Clinics" + }, + { + "slug": "survey-of-ophthalmology", + "label": "Survey of Ophthalmology" + }, + { + "slug": "svensk-exegetisk-arsbok", + "label": "Svensk exegetisk årsbok (full note)" + }, + { + "slug": "swedish-legal", + "label": "Swedish Legal (Svenska)" + }, + { + "slug": "swiss-political-science-review", + "label": "Swiss Political Science Review" + }, + { + "slug": "sylwan", + "label": "Sylwan (Polski)" + }, + { + "slug": "synthesis", + "label": "Synthesis" + }, + { + "slug": "system-dynamics-review", + "label": "System Dynamics Review" + }, + { + "slug": "systematic-and-applied-microbiology", + "label": "Systematic and Applied Microbiology" + }, + { + "slug": "systematic-biology", + "label": "Systematic Biology" + }, + { + "slug": "szociologiai-szemle", + "label": "Szociológiai Szemle (Magyar)" + }, + { + "slug": "tabula", + "label": "Tábula (Español)" + }, + { + "slug": "tagungsberichte-der-historischen-kommission-fur-ost-und-westpreussische-landesforschung", + "label": "Tagungsberichte der Historischen Kommission für ost- und westpreußische Landesforschung (Deutsch)" + }, + { + "slug": "tatup-zeitschrift-fur-technikfolgenabschatzung-in-theorie-und-praxis", + "label": "TATuP - Zeitschrift für Technikfolgenabschätzung in Theorie und Praxis" + }, + { + "slug": "taxon", + "label": "Taxon" + }, + { + "slug": "taylor-and-francis-acs", + "label": "Taylor & Francis - American Chemical Society" + }, + { + "slug": "taylor-and-francis-aip", + "label": "Taylor & Francis - American Institute of Physics" + }, + { + "slug": "taylor-and-francis-ama", + "label": "Taylor & Francis - AMA" + }, + { + "slug": "taylor-and-francis-chicago-author-date", + "label": "Taylor & Francis - Chicago Manual of Style (author-date)" + }, + { + "slug": "taylor-and-francis-chicago-b-author-date", + "label": "Taylor & Francis - US Chicago Manual of Style B (author-date)" + }, + { + "slug": "taylor-and-francis-chicago-f", + "label": "Taylor & Francis - Chicago F" + }, + { + "slug": "taylor-and-francis-council-of-science-editors-author-date", + "label": "Taylor & Francis - Council of Science Editors (author-date)" + }, + { + "slug": "taylor-and-francis-council-of-science-editors-numeric", + "label": "Taylor & Francis - Council of Science Editors (numeric)" + }, + { + "slug": "taylor-and-francis-harvard-x", + "label": "Taylor & Francis - Harvard X" + }, + { + "slug": "taylor-and-francis-national-library-of-medicine", + "label": "Taylor & Francis - National Library of Medicine" + }, + { + "slug": "taylor-and-francis-numeric-q", + "label": "Taylor & Francis - Numeric Q" + }, + { + "slug": "taylor-and-francis-vancouver-national-library-of-medicine", + "label": "Taylor & Francis - Vancouver/National Library of Medicine" + }, + { + "slug": "techniques-et-culture", + "label": "Techniques&Culture (Français)" + }, + { + "slug": "technische-universitat-dortmund-ag-virtual-machining", + "label": "Technische Universität Dortmund - AG Virtual Machining (Deutsch)" + }, + { + "slug": "technische-universitat-dresden-betriebswirtschaftslehre-logistik-author-date", + "label": "Technische Universität Dresden - Betriebswirtschaftslehre/Logistik (author-date)" + }, + { + "slug": "technische-universitat-dresden-betriebswirtschaftslehre-marketing", + "label": "Technische Universität Dresden - Betriebswirtschaftslehre/Marketing (author-date)" + }, + { + "slug": "technische-universitat-dresden-betriebswirtschaftslehre-rechnungswesen-controlling", + "label": "Technische Universität Dresden - Betriebswirtschaftslehre/Rechnungswesen/Controlling (Deutsch)" + }, + { + "slug": "technische-universitat-dresden-erziehungswissenschaften-author-date", + "label": "Technische Universität Dresden - Erziehungswissenschaften (author-date)" + }, + { + "slug": "technische-universitat-dresden-finanzwirtschaft-und-finanzdienstleistungen-author-date-with-short-titles", + "label": "Technische Universität Dresden - Finanzwirtschaft und Finanzdienstleistungen (author-date, with short titles)" + }, + { + "slug": "technische-universitat-dresden-finanzwirtschaft-und-finanzdienstleistungen-author-date", + "label": "Technische Universität Dresden - Finanzwirtschaft und Finanzdienstleistungen (author-date)" + }, + { + "slug": "technische-universitat-dresden-finanzwirtschaft-und-finanzdienstleistungen-note", + "label": "Technische Universität Dresden - Finanzwirtschaft und Finanzdienstleistungen (note)" + }, + { + "slug": "technische-universitat-dresden-forstwissenschaft", + "label": "Technische Universität Dresden - Forstwissenschaft (author-date, Deutsch)" + }, + { + "slug": "technische-universitat-dresden-historische-musikwissenschaft-note", + "label": "Technische Universität Dresden - Historische Musikwissenschaft (note, Deutsch)" + }, + { + "slug": "technische-universitat-dresden-kunstgeschichte-note", + "label": "Technische Universität Dresden - Kunstgeschichte (note, Deutsch)" + }, + { + "slug": "technische-universitat-dresden-linguistik", + "label": "Technische Universität Dresden - Linguistik (Deutsch)" + }, + { + "slug": "technische-universitat-dresden-medienwissenschaft-und-neuere-deutsche-literatur-note", + "label": "Technische Universität Dresden - Medienwissenschaft und Neuere Deutsche Literatur (note, Deutsch)" + }, + { + "slug": "technische-universitat-dresden-wirtschaftswissenschaften", + "label": "Technische Universität Dresden - Wirtschaftswissenschaften (Deutsch)" + }, + { + "slug": "technische-universitat-munchen-controlling", + "label": "Technische Universität München - Controlling (Deutsch)" + }, + { + "slug": "technische-universitat-munchen-unternehmensfuhrung", + "label": "Technische Universität München - Unternehmensführung (Deutsch)" + }, + { + "slug": "technische-universitat-wien", + "label": "Technische Universität Wien (dissertation) (Deutsch)" + }, + { + "slug": "teologia-catalunya", + "label": "Teologia Catalunya" + }, + { + "slug": "termedia-neuropsychiatria-i-neuropsychologia-neuropsychiatry-and-neuropsychology", + "label": "Termedia Neuropsychiatria i Neuropsychologia/Neuropsychiatry and Neuropsychology" + }, + { + "slug": "terra-nova", + "label": "Terra Nova" + }, + { + "slug": "tetrahedron-letters", + "label": "Tetrahedron Letters" + }, + { + "slug": "textual-cultures", + "label": "Textual Cultures" + }, + { + "slug": "textual-practice", + "label": "Textual Practice" + }, + { + "slug": "tgm-wien-diplom", + "label": "TGM Wien Diplomarbeit (Deutsch)" + }, + { + "slug": "tgm-wien-diplomarbeit-onorm", + "label": "TGM Wien Diplomarbeit ÖNORM (Deutsch - Österreich)" + }, + { + "slug": "the-accounting-review", + "label": "The Accounting Review" + }, + { + "slug": "the-american-journal-of-bioethics", + "label": "The American Journal of Bioethics" + }, + { + "slug": "the-american-journal-of-cardiology", + "label": "The American Journal of Cardiology" + }, + { + "slug": "the-american-journal-of-dermatopathology", + "label": "The American Journal of Dermatopathology" + }, + { + "slug": "the-american-journal-of-gastroenterology", + "label": "The American Journal of Gastroenterology" + }, + { + "slug": "the-american-journal-of-geriatric-psychiatry", + "label": "The American Journal of Geriatric Psychiatry" + }, + { + "slug": "the-american-journal-of-pathology", + "label": "The American Journal of Pathology" + }, + { + "slug": "the-american-journal-of-psychiatry", + "label": "The American Journal of Psychiatry" + }, + { + "slug": "the-american-journal-of-tropical-medicine-and-hygiene", + "label": "The American Journal of Tropical Medicine and Hygiene" + }, + { + "slug": "the-american-midland-naturalist", + "label": "The American Midland Naturalist" + }, + { + "slug": "the-american-naturalist", + "label": "The American Naturalist" + }, + { + "slug": "the-angle-orthodontist", + "label": "The Angle Orthodontist" + }, + { + "slug": "the-astrophysical-journal", + "label": "The Astrophysical Journal" + }, + { + "slug": "the-auk", + "label": "The Auk" + }, + { + "slug": "the-australian-journal-of-agricultural-and-resource-economics", + "label": "The Australian Journal of Agricultural and Resource Economics" + }, + { + "slug": "the-biological-bulletin", + "label": "The Biological Bulletin" + }, + { + "slug": "the-bone-and-joint-journal", + "label": "The Bone & Joint Journal" + }, + { + "slug": "the-botanical-review", + "label": "The Botanical Review" + }, + { + "slug": "the-bovine-practitioner", + "label": "The Bovine Practitioner" + }, + { + "slug": "the-british-journal-for-the-philosophy-of-science", + "label": "The British Journal for the Philosophy of Science" + }, + { + "slug": "the-british-journal-of-cardiology", + "label": "The British Journal of Cardiology" + }, + { + "slug": "the-british-journal-of-criminology", + "label": "The British Journal of Criminology" + }, + { + "slug": "the-british-journal-of-psychiatry", + "label": "The British Journal of Psychiatry" + }, + { + "slug": "the-british-journal-of-sociology", + "label": "The British Journal of Sociology" + }, + { + "slug": "the-canadian-geographer", + "label": "The Canadian Geographer (Le Géographe canadien)" + }, + { + "slug": "the-canadian-journal-of-chemical-engineering", + "label": "The Canadian Journal of Chemical Engineering" + }, + { + "slug": "the-canadian-journal-of-psychiatry", + "label": "The Canadian Journal of Psychiatry" + }, + { + "slug": "the-cancer-journal", + "label": "The Cancer Journal" + }, + { + "slug": "the-chemical-society-of-japan", + "label": "The Chemical Society of Japan" + }, + { + "slug": "the-chinese-journal-of-international-politics", + "label": "The Chinese Journal of International Politics" + }, + { + "slug": "the-company-of-biologists", + "label": "The Company of Biologists" + }, + { + "slug": "the-depositional-record", + "label": "The Depositional Record" + }, + { + "slug": "the-design-journal", + "label": "The Design Journal" + }, + { + "slug": "the-economic-history-review", + "label": "The Economic History Review" + }, + { + "slug": "the-european-research-journal", + "label": "The European Research Journal" + }, + { + "slug": "the-faseb-journal", + "label": "The FASEB Journal" + }, + { + "slug": "the-febs-journal", + "label": "The FEBS Journal" + }, + { + "slug": "the-geological-society-of-america", + "label": "The Geological Society of America" + }, + { + "slug": "the-geological-society-of-london", + "label": "The Geological Society of London" + }, + { + "slug": "the-hastings-center-report", + "label": "The Hastings Center Report" + }, + { + "slug": "the-historical-journal", + "label": "The Historical Journal" + }, + { + "slug": "the-holocene", + "label": "The Holocene" + }, + { + "slug": "the-horticulture-journal", + "label": "The Horticulture Journal" + }, + { + "slug": "the-institute-of-electronics-information-and-communication-engineers", + "label": "The Institute of Electronics, Information and Communication Engineers (電子情報通信学会)" + }, + { + "slug": "the-institution-of-engineering-and-technology", + "label": "The Institution of Engineering and Technology" + }, + { + "slug": "the-international-journal-of-developmental-biology", + "label": "The International Journal of Developmental Biology" + }, + { + "slug": "the-international-journal-of-psychoanalysis", + "label": "The International Journal of Psychoanalysis" + }, + { + "slug": "the-international-journal-of-tuberculosis-and-lung-disease", + "label": "The International Journal of Tuberculosis and Lung Disease" + }, + { + "slug": "the-isme-journal", + "label": "The ISME Journal" + }, + { + "slug": "the-journal-of-adhesive-dentistry", + "label": "The Journal of Adhesive Dentistry" + }, + { + "slug": "the-journal-of-agricultural-science", + "label": "The Journal of Agricultural Science" + }, + { + "slug": "the-journal-of-clinical-ethics", + "label": "The Journal of Clinical Ethics" + }, + { + "slug": "the-journal-of-clinical-investigation", + "label": "The Journal of Clinical Investigation" + }, + { + "slug": "the-journal-of-comparative-law", + "label": "The Journal of Comparative Law" + }, + { + "slug": "the-journal-of-comparative-neurology", + "label": "The Journal of Comparative Neurology" + }, + { + "slug": "the-journal-of-egyptian-archaeology", + "label": "The Journal of Egyptian Archaeology" + }, + { + "slug": "the-journal-of-eukaryotic-microbiology", + "label": "The Journal of Eukaryotic Microbiology" + }, + { + "slug": "the-journal-of-foot-and-ankle-surgery", + "label": "The Journal of Foot & Ankle Surgery" + }, + { + "slug": "the-journal-of-hand-surgery-asian-pacific-volume", + "label": "The Journal of Hand Surgery Asian-Pacific Volume" + }, + { + "slug": "the-journal-of-hand-surgery-european-volume", + "label": "The Journal of Hand Surgery (European Volume)" + }, + { + "slug": "the-journal-of-hellenic-studies", + "label": "The Journal of Hellenic Studies" + }, + { + "slug": "the-journal-of-immunology", + "label": "The Journal of Immunology" + }, + { + "slug": "the-journal-of-infection-in-developing-countries", + "label": "The Journal of Infection in Developing Countries" + }, + { + "slug": "the-journal-of-juristic-papyrology", + "label": "The Journal of Juristic Papyrology" + }, + { + "slug": "the-journal-of-laryngology-and-otology", + "label": "The Journal of Laryngology & Otology" + }, + { + "slug": "the-journal-of-modern-history", + "label": "The Journal of Modern History" + }, + { + "slug": "the-journal-of-molecular-diagnostics", + "label": "The Journal of Molecular Diagnostics" + }, + { + "slug": "the-journal-of-nervous-and-mental-disease", + "label": "The Journal of Nervous and Mental Disease" + }, + { + "slug": "the-journal-of-neuropsychiatry-and-clinical-neurosciences", + "label": "The Journal of Neuropsychiatry and Clinical Neurosciences" + }, + { + "slug": "the-journal-of-neuroscience", + "label": "The Journal of Neuroscience" + }, + { + "slug": "the-journal-of-nuclear-medicine", + "label": "The Journal of Nuclear Medicine" + }, + { + "slug": "the-journal-of-nutrition-health-and-aging", + "label": "The Journal of Nutrition, Health & Aging" + }, + { + "slug": "the-journal-of-pain", + "label": "The Journal of Pain" + }, + { + "slug": "the-journal-of-parasitology", + "label": "The Journal of Parasitology" + }, + { + "slug": "the-journal-of-pathology", + "label": "The Journal of Pathology" + }, + { + "slug": "the-journal-of-peasant-studies", + "label": "The Journal of Peasant Studies" + }, + { + "slug": "the-journal-of-physiology", + "label": "The Journal of Physiology" + }, + { + "slug": "the-journal-of-pure-and-applied-chemistry-research", + "label": "The Journal of Pure and Applied Chemistry Research" + }, + { + "slug": "the-journal-of-roman-studies", + "label": "The Journal of Roman Studies" + }, + { + "slug": "the-journal-of-the-acoustical-society-of-america-numeric", + "label": "The Journal of the Acoustical Society of America (numeric)" + }, + { + "slug": "the-journal-of-the-acoustical-society-of-america", + "label": "The Journal of the Acoustical Society of America (author-date)" + }, + { + "slug": "the-journal-of-the-torrey-botanical-society", + "label": "The Journal of the Torrey Botanical Society" + }, + { + "slug": "the-journal-of-transport-history", + "label": "The Journal of Transport History" + }, + { + "slug": "the-journal-of-trauma-and-acute-care-surgery", + "label": "The Journal of Trauma and Acute Care Surgery" + }, + { + "slug": "the-journal-of-urology", + "label": "The Journal of Urology" + }, + { + "slug": "the-journal-of-veterinary-medical-science", + "label": "The Journal of Veterinary Medical Science" + }, + { + "slug": "the-journal-of-wildlife-management", + "label": "The Journal of Wildlife Management" + }, + { + "slug": "the-journals-of-gerontology-series-a", + "label": "The Journals of Gerontology, Series A: Biological Sciences and Medical Sciences" + }, + { + "slug": "the-korean-journal-of-gastroenterology", + "label": "The Korean Journal of Gastroenterology" + }, + { + "slug": "the-korean-journal-of-internal-medicine", + "label": "The Korean Journal of Internal Medicine" + }, + { + "slug": "the-korean-journal-of-mycology", + "label": "The Korean Journal of Mycology" + }, + { + "slug": "the-lancet", + "label": "The Lancet" + }, + { + "slug": "the-lichenologist", + "label": "The Lichenologist" + }, + { + "slug": "the-national-medical-journal-of-india", + "label": "The National Medical Journal of India" + }, + { + "slug": "the-neuroscientist", + "label": "The Neuroscientist" + }, + { + "slug": "the-new-england-journal-of-medicine", + "label": "The New England Journal of Medicine" + }, + { + "slug": "the-oncologist", + "label": "The Oncologist" + }, + { + "slug": "the-open-university-a251", + "label": "The Open University - A251 - Arts Course" + }, + { + "slug": "the-open-university-harvard", + "label": "The Open University - Harvard" + }, + { + "slug": "the-open-university-m801", + "label": "The Open University - M801 - Research Project and Dissertation" + }, + { + "slug": "the-open-university-numeric-superscript", + "label": "The Open University (numeric, superscript)" + }, + { + "slug": "the-open-university-numeric", + "label": "The Open University (numeric)" + }, + { + "slug": "the-open-university-s390", + "label": "The Open University - S390" + }, + { + "slug": "the-optical-society", + "label": "The Optical Society" + }, + { + "slug": "the-pan-african-medical-journal", + "label": "The Pan African Medical Journal" + }, + { + "slug": "the-plant-cell", + "label": "The Plant Cell" + }, + { + "slug": "the-plant-genome", + "label": "The Plant Genome" + }, + { + "slug": "the-plant-journal", + "label": "The Plant Journal" + }, + { + "slug": "the-quarterly-journal-of-economics", + "label": "The Quarterly Journal of Economics" + }, + { + "slug": "the-review-of-financial-studies", + "label": "The Review of Financial Studies" + }, + { + "slug": "the-rockefeller-university-press", + "label": "The Rockefeller University Press" + }, + { + "slug": "the-saudi-journal-for-dental-research", + "label": "The Saudi Journal for Dental Research" + }, + { + "slug": "the-scandinavian-journal-of-clinical-and-laboratory-investigation", + "label": "The Scandinavian Journal of Clinical & Laboratory Investigation" + }, + { + "slug": "the-university-of-tokyo-law-review", + "label": "東京大学法科大学院ローレビュー (The University of Tokyo Law Review) (日本語)" + }, + { + "slug": "the-university-of-western-australia-harvard", + "label": "The University of Western Australia - Harvard" + }, + { + "slug": "the-university-of-winchester-harvard", + "label": "The University of Winchester - Harvard" + }, + { + "slug": "the-world-journal-of-biological-psychiatry", + "label": "The World Journal of Biological Psychiatry" + }, + { + "slug": "theologie-und-philosophie", + "label": "Theologie und Philosophie (Deutsch)" + }, + { + "slug": "theory-culture-and-society", + "label": "Theory, Culture & Society" + }, + { + "slug": "theranostics", + "label": "Theranostics" + }, + { + "slug": "theses-de-sorbonne-universite", + "label": "Thèse de Sorbonne Université (Sciences Humaines et Sociales, Français)" + }, + { + "slug": "thieme-german", + "label": "Thieme-German (Deutsch)" + }, + { + "slug": "thomson-reuters-legal-tax-and-accounting-australia", + "label": "Thomson Reuters - Legal, Tax & Accounting Australia" + }, + { + "slug": "thrombosis-and-haemostasis", + "label": "Thrombosis and Haemostasis" + }, + { + "slug": "tijdschrift-voor-economische-en-sociale-geografie", + "label": "Tijdschrift voor economische en sociale geografie" + }, + { + "slug": "tijdschrift-voor-geneeskunde", + "label": "Tijdschrift voor Geneeskunde en Gezondheidszorg (Nederlands)" + }, + { + "slug": "topoi-orient-occident-auteur-date", + "label": "Topoi Orient-Occident (auteur-date, Français)" + }, + { + "slug": "topoi-orient-occident-classique", + "label": "Topoi Orient-Occident (classique, Français)" + }, + { + "slug": "toxicological-sciences", + "label": "Toxicological Sciences" + }, + { + "slug": "trabajos-de-prehistoria", + "label": "Trabajos de Prehistoria (Español)" + }, + { + "slug": "traces", + "label": "Tracés: Revue de Sciences Humaines (Français)" + }, + { + "slug": "traffic-injury-prevention", + "label": "Traffic Injury Prevention" + }, + { + "slug": "traffic", + "label": "Traffic" + }, + { + "slug": "trames", + "label": "Trames" + }, + { + "slug": "transactions-of-the-american-philological-association", + "label": "Transactions of the American Philological Association" + }, + { + "slug": "transactions-of-the-materials-research-society-of-japan", + "label": "Transactions of the Materials Research Society of Japan" + }, + { + "slug": "transboundary-and-emerging-diseases", + "label": "Transboundary and Emerging Diseases" + }, + { + "slug": "transnational-environmental-law", + "label": "Transnational Environmental Law" + }, + { + "slug": "transplantation", + "label": "Transplantation" + }, + { + "slug": "transport", + "label": "Transport" + }, + { + "slug": "transportation-research-record", + "label": "Transportation Research Record: Journal of the Transportation Research Board" + }, + { + "slug": "transposition", + "label": "Transposition. Musique et sciences sociales" + }, + { + "slug": "transversalites", + "label": "Transversalités (Français)" + }, + { + "slug": "travail-et-emploi", + "label": "Travail et Emploi (Français)" + }, + { + "slug": "tree-physiology", + "label": "Tree Physiology" + }, + { + "slug": "trends-in-glycoscience-and-glycotechnology", + "label": "Trends in Glycoscience and Glycotechnology" + }, + { + "slug": "trends-journals", + "label": "Trends journals" + }, + { + "slug": "triangle", + "label": "Triangle (Français)" + }, + { + "slug": "trinity-college-dublin-zoology-botany-environmental-sciences-harvard", + "label": "Trinity College Dublin - Zoology Botany Environmental Sciences - Harvard" + }, + { + "slug": "tropical-animal-health-and-production", + "label": "Tropical Animal Health and Production" + }, + { + "slug": "tsaqafah", + "label": "Tsaqafah" + }, + { + "slug": "turabian-author-date", + "label": "Turabian 9th edition (author-date)" + }, + { + "slug": "turabian-fullnote-bibliography-8th-edition", + "label": "Turabian 8th edition (full note)" + }, + { + "slug": "turabian-fullnote-bibliography-no-ibid", + "label": "Turabian 8th edition (full note, no ibid)" + }, + { + "slug": "turcica", + "label": "Turcica" + }, + { + "slug": "turkiye-bilimsel-ve-teknolojik-arastirma-kurumu", + "label": "TÜBİTAK (Türkiye Bilimsel ve Teknolojik Araştırma Kurumu) (Türkçe)" + }, + { + "slug": "twentieth-century-music", + "label": "Twentieth-Century Music" + }, + { + "slug": "tyndale-bulletin", + "label": "Tyndale Bulletin" + }, + { + "slug": "u-schylku-starozytnosci", + "label": "U Schyłku Starożytności (Polski)" + }, + { + "slug": "ucl-institute-of-education-harvard", + "label": "UCL Institute of Education - Harvard" + }, + { + "slug": "ucl-university-college-apa", + "label": "UCL University College - APA (Dansk)" + }, + { + "slug": "ucl-university-college-harvard", + "label": "UCL University College - Harvard (Dansk)" + }, + { + "slug": "ucl-university-college-vancouver", + "label": "UCL University College - Vancouver (English)" + }, + { + "slug": "uclouvain-centre-charles-de-visscher-pour-le-droit-international-et-europeen", + "label": "UCLouvain - Centre Charles De Visscher pour le droit international et européen (French)" + }, + { + "slug": "ugent-geschiedenis-nederlands", + "label": "Universiteit Gent Geschiedenis (Nederlands)" + }, + { + "slug": "ugeskrift-for-laeger", + "label": "Ugeskrift for Læger (Dansk)" + }, + { + "slug": "ultrasound-in-medicine-and-biology", + "label": "Ultrasound in Medicine and Biology" + }, + { + "slug": "ulua-revista-de-historia-sociedad-y-cultura", + "label": "Ulúa. Revista de Historia, Sociedad y Cultura" + }, + { + "slug": "uludag-universitesi-sosyal-bilimler-enstitusu-author-date", + "label": "Uludağ Üniversitesi - Sosyal Bilimler Enstitüsü (author-date, Türkçe)" + }, + { + "slug": "uludag-universitesi-sosyal-bilimler-enstitusu-full-note-with-ibid", + "label": "Uludağ Üniversitesi - Sosyal Bilimler Enstitüsü (full note, with Ibid., Türkçe)" + }, + { + "slug": "uludag-universitesi-sosyal-bilimler-enstitusu-full-note", + "label": "Uludağ Üniversitesi - Sosyal Bilimler Enstitüsü (full note, Türkçe)" + }, + { + "slug": "uludag-universitesi-sosyal-bilimler-enstitusu-ilahiyat-fakultesi-full-note-with-ibid", + "label": "Uludağ Üniversitesi - Sosyal Bilimler Enstitüsü - İlahiyat Fakültesi (full note, with Ibid., Türkçe)" + }, + { + "slug": "uludag-universitesi-sosyal-bilimler-enstitusu-ilahiyat-fakultesi-full-note", + "label": "Uludağ Üniversitesi - Sosyal Bilimler Enstitüsü - İlahiyat Fakültesi (full note, Türkçe)" + }, + { + "slug": "unesco-international-institute-for-educational-planning", + "label": "UNESCO International Institute for Educational Planning" + }, + { + "slug": "uni-fribourg-theologie", + "label": "Uni Fribourg Theologie (Deutsch)" + }, + { + "slug": "unified-style-sheet-for-linguistics-de-gruyter-literature", + "label": "Unified Stylesheet for Linguistics (de Gruyter Literature)" + }, + { + "slug": "unified-style-sheet-for-linguistics", + "label": "Unified style sheet for linguistics" + }, + { + "slug": "united-nations-conference-on-trade-and-development", + "label": "United Nations Conference on Trade and Development" + }, + { + "slug": "united-nations-development-programme-icca-legal-review", + "label": "United Nations Development Programme ICCA Legal Review" + }, + { + "slug": "united-nations-framework-convention-on-climate-change", + "label": "United Nations Framework Convention on Climate Change" + }, + { + "slug": "united-states-international-trade-commission", + "label": "United States International Trade Commission" + }, + { + "slug": "universidad-autonoma-cidudad-juarez-estilo-latino-humanistico", + "label": "Universidad Autónoma de Ciudad Juárez - Estilo Latino Humanístico" + }, + { + "slug": "universidad-de-leon-harvard", + "label": "Universidad de León (España) - Harvard" + }, + { + "slug": "universidad-evangelica-del-paraguay", + "label": "Universidad Evangélica del Paraguay (Español)" + }, + { + "slug": "universidade-de-sao-paulo-escola-de-comunicacoes-e-artes-abnt", + "label": "Universidade de São Paulo - Escola de Comunicações e Artes - ABNT (Português - Brasil)" + }, + { + "slug": "universidade-de-sao-paulo-instituto-de-matematica-e-estatistica", + "label": "Universidade de São Paulo - Instituto de Matemática e Estatística" + }, + { + "slug": "universidade-do-estado-do-rio-de-janeiro-abnt", + "label": "Universidade do Estado do Rio de Janeiro - ABNT (Português - Brasil)" + }, + { + "slug": "universidade-do-porto-faculdade-de-engenharia-chicago-pt", + "label": "Universidade do Porto - Faculdade de Engenharia - Chicago Manual of Style 17th (author-date) (Português - Portugal)" + }, + { + "slug": "universidade-do-porto-faculdade-de-engenharia-chicago", + "label": "Universidade do Porto - Faculdade de Engenharia - Chicago Manual of Style 17th (author-date)" + }, + { + "slug": "universidade-do-porto-faculdade-de-psicologia-e-de-ciencias-da-educacao", + "label": "Universidade do Porto - Faculdade de Psicologia e de Ciências da Educação - APA" + }, + { + "slug": "universidade-estadual-de-alagoas-abnt", + "label": "Universidade Estadual de Alagoas - UNEAL [ABNT] (Portuguese - Brazil)" + }, + { + "slug": "universidade-estadual-do-oeste-do-parana-programa-institucional-de-bolsas-de-iniciacao-cientifica", + "label": "Universidade Estadual do Oeste do Paraná - Programa Institucional de Bolsas de Iniciação Científica (Português - Brasil)" + }, + { + "slug": "universidade-estadual-paulista-campus-de-dracena-abnt", + "label": "Universidade Estadual Paulista - Campus de Dracena - ABNT (autoria abreviada) (Português - Brasil)" + }, + { + "slug": "universidade-estadual-paulista-faculdade-de-engenharia-de-guaratingueta-abnt", + "label": "Universidade Estadual Paulista - Faculdade de Engenharia de Guaratingueta - ABNT (Português - Brasil)" + }, + { + "slug": "universidade-federal-de-juiz-de-fora", + "label": "Universidade Federal de Juiz de Fora (Português - Brasil)" + }, + { + "slug": "universidade-federal-de-pernambuco-abnt", + "label": "Universidade Federal de Pernambuco - ABNT (Português - Brasil)" + }, + { + "slug": "universidade-federal-de-sergipe-departamento-de-engenharia-de-producao-abnt", + "label": "Universidade Federal de Sergipe - Departamento de Engenharia de Produção - ABNT (Português - Brasil)" + }, + { + "slug": "universidade-federal-do-espirito-santo-abnt-initials", + "label": "Universidade Federal do Espírito Santo - ABNT (autoria abreviada) (Português - Brasil)" + }, + { + "slug": "universidade-federal-do-espirito-santo-abnt", + "label": "Universidade Federal do Espírito Santo - ABNT (autoria completa) (Português - Brasil)" + }, + { + "slug": "universidade-federal-do-rio-de-janeiro-instituto-alberto-luiz-coimbra-de-pos-graduacao-e-pesquisa-de-engenharia-abnt", + "label": "Universidade Federal do Rio de Janeiro - Instituto Alberto Luiz Coimbra de Pós-Graduação e Pesquisa de Engenharia - ABNT (Português - Brasil)" + }, + { + "slug": "universita-cattolica-del-sacro-cuore", + "label": "Università Cattolica del Sacro Cuore (note, Italiano)" + }, + { + "slug": "universita-di-bologna-lettere", + "label": "University of Bologna - Liberal Arts College (Università di Bologna - Facoltà di Lettere e Filosofia) (Italiano)" + }, + { + "slug": "universita-pontificia-salesiana-it", + "label": "Università Pontificia Salesiana (Italiano)" + }, + { + "slug": "universita-pontificia-salesiana", + "label": "Università Pontificia Salesiana" + }, + { + "slug": "universitas-gadjah-mada-departemen-sejarah", + "label": "Universitas Gadjah Mada - Departemen Sejarah (Bahasa Indonesia)" + }, + { + "slug": "universitas-negeri-semarang-fakultas-matematika-dan-ilmu-pengetahuan-alam", + "label": "Universitas Negeri Semarang - Fakultas Matematika dan Ilmu Pengetahuan Alam (Bahasa Indonesia)" + }, + { + "slug": "universitas-negeri-yogyakarta-program-pascasarjana", + "label": "Universitas Negeri Yogyakarta - Program Pascasarjana (Bahasa Indonesia)" + }, + { + "slug": "universitat-basel-deutsche-sprachwissenschaft", + "label": "Universität Basel - Deutsche Sprachwissenschaft" + }, + { + "slug": "universitat-basel-iberoromanistik", + "label": "Universität Basel - Iberoromanistik (Español)" + }, + { + "slug": "universitat-bern-institut-fur-musikwissenschaft-note", + "label": "Universität Bern - Institut für Musikwissenschaft (note, Deutsch)" + }, + { + "slug": "universitat-bern-institut-fur-sozialanthropologie", + "label": "Universität Bern - Institut für Sozialanthropologie (Deutsch - Schweiz)" + }, + { + "slug": "universitat-bremen-institut-fur-politikwissenschaft", + "label": "Universität Bremen - Institut für Politikwissenschaft (Deutsch)" + }, + { + "slug": "universitat-bremen-lehrstuhl-fur-innovatives-markenmanagement", + "label": "Universität Bremen - Lehrstuhl für innovatives Markenmanagement (Deutsch)" + }, + { + "slug": "universitat-freiburg-geschichte", + "label": "Albert-Ludwigs-Universität Freiburg - Geschichte (Deutsch)" + }, + { + "slug": "universitat-heidelberg-historisches-seminar", + "label": "Universität Heidelberg - Historisches Seminar (Deutsch)" + }, + { + "slug": "universitat-heidelberg-medizinische-fakultat-mannheim-numeric", + "label": "Universität Heidelberg - Medizinische Fakultät Mannheim (numerisch, Deutsch)" + }, + { + "slug": "universitat-mainz-geographisches-institut", + "label": "Universität Mainz - Geographisches Institut (Deutsch)" + }, + { + "slug": "universitat-mannheim-germanistische-linguistik", + "label": "Universität Mannheim - Germanistische Linguistik (Deutsch)" + }, + { + "slug": "universitat-stuttgart-planung-und-partizipation", + "label": "Universität Stuttgart - Planung und Partizipation (Deutsch)" + }, + { + "slug": "universitat-wien-institut-fur-geschichte", + "label": "Universität Wien - Institut für Geschichte" + }, + { + "slug": "universitat-wurzburg-institut-fur-deutsche-philologie-museologie", + "label": "Universität Würzburg - Institut für deutsche Philologie - Museologie (Deutsch)" + }, + { + "slug": "universitat-zu-koln-seminar-fur-abwl-und-finanzierungslehre", + "label": "Universität zu Köln - Seminar für ABWL und Finanzierungslehre (Deutsch)" + }, + { + "slug": "universitatsmedizin-gottingen", + "label": "Universitätsmedizin Göttingen (Deutsch)" + }, + { + "slug": "universite-catholique-de-louvain-histoire", + "label": "Université Catholique de Louvain - Histoire (Français)" + }, + { + "slug": "universite-cheikh-anta-diop-faculte-de-medecine-de-pharmacie-et-dodontologie", + "label": "Université Cheikh Anta Diop - Faculté de Médecine de Pharmacie et d'Odontologie (Français)" + }, + { + "slug": "universite-de-bordeaux-ecole-doctorale-de-droit", + "label": "Université de Bordeaux - École doctorale de droit (Français)" + }, + { + "slug": "universite-de-geneve-departement-de-langue-et-de-litterature-francaises-modernes", + "label": "Université de Genève - Département de langue et de littérature françaises modernes (Français)" + }, + { + "slug": "universite-de-lausanne-histoire", + "label": "Université de Lausanne - Histoire (Français)" + }, + { + "slug": "universite-de-lausanne-institut-d-archeologie-et-des-sciences-de-l-antiquite", + "label": "Université de Lausanne - Institut d'archéologie et des sciences de l'antiquité (Français)" + }, + { + "slug": "universite-de-liege-droit-par-categorie", + "label": "Université de Liège - Droit (classement par catégorie, Français)" + }, + { + "slug": "universite-de-liege-droit", + "label": "Université de Liège - Droit (Français)" + }, + { + "slug": "universite-de-liege-histoire", + "label": "Université de Liège - Histoire (Français)" + }, + { + "slug": "universite-de-montreal-apa", + "label": "Université de Montréal - APA (Français - Canada)" + }, + { + "slug": "universite-de-montreal-faculte-de-musique", + "label": "Université de Montréal - Faculté de musique (Français - Canada)" + }, + { + "slug": "universite-de-picardie-jules-verne-ufr-de-medecine", + "label": "Université de Picardie Jules Verne (Amiens) - Thèse de UFR de Médecine" + }, + { + "slug": "universite-de-sherbrooke-departement-de-geomatique", + "label": "Université de Sherbrooke - Département de géomatique (Français - Canada)" + }, + { + "slug": "universite-de-sherbrooke-faculte-d-education", + "label": "Université de Sherbrooke - Faculté d'éducation (Français - Canada)" + }, + { + "slug": "universite-de-sherbrooke-histoire", + "label": "Université de Sherbrooke - Histoire (Français - Canada)" + }, + { + "slug": "universite-du-quebec-a-montreal-departement-dhistoire", + "label": "Université du Québec à Montréal - Département d’histoire (Français - Canada)" + }, + { + "slug": "universite-du-quebec-a-montreal-etudes-litteraires-et-semiologie", + "label": "Université du Québec à Montréal - Études littéraires et sémiologie (Français - Canada)" + }, + { + "slug": "universite-du-quebec-a-montreal-prenoms", + "label": "Université du Québec à Montréal - APA - prénoms (Français - Canada)" + }, + { + "slug": "universite-du-quebec-a-montreal", + "label": "Université du Québec à Montréal - APA (Français - Canada)" + }, + { + "slug": "universite-laval-departement-des-sciences-historiques", + "label": "Université Laval - Département des sciences historiques (Français - Canada)" + }, + { + "slug": "universite-laval-departement-dinformation-et-de-communication", + "label": "Université Laval - Département d'information et de communication (Français - Canada)" + }, + { + "slug": "universite-laval-faculte-de-theologie-et-de-sciences-religieuses", + "label": "Université Laval - Faculté de théologie et de sciences religieuses (Français - Canada)" + }, + { + "slug": "universite-libre-de-bruxelles-histoire", + "label": "Université libre de Bruxelles - Histoire (Français)" + }, + { + "slug": "universite-nangui-abrogoua-sciences-de-la-nature-apa", + "label": "Université Nangui Abrogoua - Sciences de la Nature - APA (Français)" + }, + { + "slug": "universiteit-utrecht-onderzoeksgids-geschiedenis", + "label": "Universiteit Utrecht - Onderzoeksgids Geschiedenis (Nederlands)" + }, + { + "slug": "universitetet-i-oslo-rettsvitenskap", + "label": "Universitetet i Oslo - Rettsvitenskap (Norsk - Bokmål)" + }, + { + "slug": "universiti-kebangsaan-malaysia", + "label": "Universiti Kebangsaan Malaysia (Malay)" + }, + { + "slug": "university-college-dublin-school-of-history-and-archives", + "label": "University College Dublin - School of History & Archives" + }, + { + "slug": "university-college-lillebaelt-apa", + "label": "University College Lillebælt - APA (Dansk)" + }, + { + "slug": "university-for-the-creative-arts-figures", + "label": "University for the Creative Arts (figures and illustrations)" + }, + { + "slug": "university-of-aberdeen-school-of-education-harvard", + "label": "University of Aberdeen - School of Education - Harvard" + }, + { + "slug": "university-of-aleppo-faculty-of-medicine", + "label": "University of Aleppo - Faculty of Medicine" + }, + { + "slug": "university-of-auckland-history", + "label": "University of Auckland - History" + }, + { + "slug": "university-of-bradford-harvard", + "label": "University of Bradford - Harvard" + }, + { + "slug": "university-of-cambridge-faculty-of-history", + "label": "University of Cambridge - Faculty of History" + }, + { + "slug": "university-of-gothenburg-apa-7th-edition-swedish-legislations", + "label": "University of Gothenburg - APA 7th edition (Swedish legislations)" + }, + { + "slug": "university-of-gothenburg-apa-swedish-legislations", + "label": "University of Gothenburg - APA 6th edition (Swedish legislations)" + }, + { + "slug": "university-of-helsinki-faculty-of-theology", + "label": "Helsingin yliopisto - Teologinen tiedekunta (Suomi)" + }, + { + "slug": "university-of-hull-harvard", + "label": "University of Hull Harvard" + }, + { + "slug": "university-of-lincoln-harvard", + "label": "University of Lincoln - Harvard" + }, + { + "slug": "university-of-new-england-australia-note", + "label": "University of New England, Australia (note)" + }, + { + "slug": "university-of-pretoria-harvard-theology-religion", + "label": "University of Pretoria - Harvard (Theology and Religion)" + }, + { + "slug": "university-of-roehampton-harvard", + "label": "University of Roehampton - Harvard" + }, + { + "slug": "university-of-south-africa-harvard", + "label": "University of South Africa - Harvard" + }, + { + "slug": "university-of-south-australia-2017-harvard", + "label": "University of South Australia 2017 - Harvard" + }, + { + "slug": "university-of-south-australia-harvard-2011", + "label": "University of South Australia 2011 - Harvard" + }, + { + "slug": "university-of-south-australia-harvard-2013", + "label": "University of South Australia 2013 - Harvard" + }, + { + "slug": "university-of-south-wales-harvard", + "label": "University of South Wales - Harvard" + }, + { + "slug": "university-of-tasmania-simplified-author-date", + "label": "University of Tasmania - Simplified Author-date" + }, + { + "slug": "university-of-york-apa", + "label": "University of York - APA 6th edition" + }, + { + "slug": "university-of-york-chicago", + "label": "University of York - Chicago Manual of Style 16th edition" + }, + { + "slug": "university-of-york-harvard-archaeology", + "label": "University of York - Harvard - Archaeology" + }, + { + "slug": "university-of-york-harvard-environment", + "label": "University of York - Harvard - Environment" + }, + { + "slug": "university-of-york-harvard", + "label": "University of York - Harvard" + }, + { + "slug": "university-of-york-ieee", + "label": "University of York - IEEE" + }, + { + "slug": "university-of-york-mhra", + "label": "University of York - Modern Humanities Research Association 3rd edition" + }, + { + "slug": "university-of-york-mla", + "label": "University of York - Modern Language Association 8th edition" + }, + { + "slug": "university-of-york-oscola", + "label": "University of York - OSCOLA" + }, + { + "slug": "university-of-york-vancouver", + "label": "University of York - Vancouver" + }, + { + "slug": "university-of-zabol-fa", + "label": "University of Zabol (فارسی)" + }, + { + "slug": "university-of-zabol", + "label": "University of Zabol (English)" + }, + { + "slug": "univerza-na-primorskem-fakulteta-za-vede-o-zdravju-apa", + "label": "Univerza na Primorskem - Fakulteta za vede o zdravju - APA 7 (Slovenščina)" + }, + { + "slug": "uniwersytet-im-adama-mickiewicza-w-poznaniu-wydzial-anglistyki", + "label": "Uniwersytet im. Adama Mickiewicza w Poznaniu - Wydział Anglistyki (English)" + }, + { + "slug": "uniwersytet-kardynala-stefana-wyszynskiego-w-warszawie-autor-rok", + "label": "Uniwersytet Kardynała Stefana Wyszyńskiego w Warszawie (autor-rok, Polski)" + }, + { + "slug": "uniwersytet-kardynala-stefana-wyszynskiego-w-warszawie-przypis", + "label": "Uniwersytet Kardynała Stefana Wyszyńskiego w Warszawie (przypis, Polski)" + }, + { + "slug": "uppsala-universitet-historia", + "label": "Uppsala universitet - Historia" + }, + { + "slug": "uppsala-universitet-institutionen-for-biologisk-grundutbildning", + "label": "Uppsala universitet, Institutionen för biologisk grundutbildning" + }, + { + "slug": "uppsala-university-library-harvard", + "label": "Uppsala University Library - Harvard" + }, + { + "slug": "urad-rs-za-makroekonomske-analize-in-razvoj", + "label": "Urad RS za makroekonomske analize in razvoj (Slovenščina)" + }, + { + "slug": "urban-geography", + "label": "Urban Geography" + }, + { + "slug": "urban-habitats", + "label": "Urban Habitats" + }, + { + "slug": "urban-studies", + "label": "Urban Studies" + }, + { + "slug": "urbani-izziv-en", + "label": "Urbani izziv (Urban Challenge) (English)" + }, + { + "slug": "urbani-izziv", + "label": "Urbani izziv (Urban Challenge) (Slovenščina)" + }, + { + "slug": "urological-science", + "label": "Urological Science" + }, + { + "slug": "us-geological-survey", + "label": "U.S. Geological Survey" + }, + { + "slug": "usda-forest-service-pacific-northwest-research-station", + "label": "USDA Forest Service - Pacific Northwest Research Station" + }, + { + "slug": "user-modeling-and-user-adapted-interaction", + "label": "User Modeling and User-Adapted Interaction" + }, + { + "slug": "uspekhi-gerontologii", + "label": "Успехи геронтологии (Ру́сский)" + }, + { + "slug": "utah-geological-survey", + "label": "Utah Geological Survey" + }, + { + "slug": "van-yuzuncu-yil-universitesi-fen-bilimleri-enstitusu", + "label": "Van Yüzüncü Yıl Üniversitesi Fen Bilimleri Enstitüsü - Tez Yazım Stili (Türkçe)" + }, + { + "slug": "vancouver-alphabetical", + "label": "Vancouver (sorted alphabetically)" + }, + { + "slug": "vancouver-author-date", + "label": "Vancouver (author-date)" + }, + { + "slug": "vancouver-brackets-no-et-al", + "label": "Vancouver (brackets, no \"et al.\")" + }, + { + "slug": "vancouver-brackets-only-year-no-issue", + "label": "Vancouver (brackets, only year in date, no issue numbers)" + }, + { + "slug": "vancouver-brackets", + "label": "Vancouver (brackets)" + }, + { + "slug": "vancouver-fr-ca", + "label": "Vancouver (Français - Canada)" + }, + { + "slug": "vancouver-imperial-college-london", + "label": "Imperial College London - Vancouver" + }, + { + "slug": "vancouver-superscript-brackets-only-year", + "label": "Vancouver (superscript, brackets, only year in date)" + }, + { + "slug": "vancouver-superscript-only-year", + "label": "Vancouver (superscript, only year in date, no issue numbers)" + }, + { + "slug": "vancouver-superscript", + "label": "Vancouver (superscript)" + }, + { + "slug": "vancouver", + "label": "Vancouver" + }, + { + "slug": "veterinaria-italiana", + "label": "Veterinaria Italiana" + }, + { + "slug": "veterinary-clinical-pathology", + "label": "Veterinary Clinical Pathology" + }, + { + "slug": "veterinary-medicine-austria", + "label": "Veterinary Medicine Austria (Wiener Tierärztliche Monatsschrift)" + }, + { + "slug": "veterinary-microbiology", + "label": "Veterinary Microbiology" + }, + { + "slug": "veterinary-pathology", + "label": "Veterinary Pathology" + }, + { + "slug": "veterinary-radiology-and-ultrasound", + "label": "Veterinary Radiology & Ultrasound" + }, + { + "slug": "veterinary-record-open", + "label": "Veterinary Record Open" + }, + { + "slug": "veterinary-record", + "label": "Veterinary Record" + }, + { + "slug": "victoria-university-harvard", + "label": "Victoria University - Harvard" + }, + { + "slug": "vienna-legal", + "label": "Vienna Legal" + }, + { + "slug": "vietnam-ministry-of-education-and-training-en", + "label": "Vietnam Ministry of Education and Training (English)" + }, + { + "slug": "vietnam-ministry-of-education-and-training-vi", + "label": "Vietnam Ministry of Education and Training (Tiếng Việt)" + }, + { + "slug": "vigiliae-christianae", + "label": "Vigiliae Christianae" + }, + { + "slug": "vilnius-gediminas-technical-university", + "label": "Vilnius Gediminas Technical University (Lietuvių kalba)" + }, + { + "slug": "vingtieme-siecle", + "label": "Vingtième Siècle. Revue d'histoire (Français)" + }, + { + "slug": "vita-latina-auteurs-anciens", + "label": "Vita Latina (auteurs anciens, Français)" + }, + { + "slug": "vita-latina", + "label": "Vita Latina (Français)" + }, + { + "slug": "vodohospodarske-technicko-ekonomicke-informace-en", + "label": "Vodohospodářské technicko-ekonomické informace (English)" + }, + { + "slug": "vodohospodarske-technicko-ekonomicke-informace", + "label": "Vodohospodářské technicko-ekonomické informace (Čeština)" + }, + { + "slug": "vox-sanguinis", + "label": "Vox Sanguinis" + }, + { + "slug": "wader-study", + "label": "Wader Study" + }, + { + "slug": "water-alternatives", + "label": "Water Alternatives" + }, + { + "slug": "water-environment-research", + "label": "Water Environment Research" + }, + { + "slug": "water-sa", + "label": "Water SA" + }, + { + "slug": "water-science-and-technology", + "label": "Water Science & Technology" + }, + { + "slug": "waterbirds", + "label": "Waterbirds" + }, + { + "slug": "weed-research", + "label": "Weed Research" + }, + { + "slug": "weed-science-society-of-america", + "label": "Weed Science Society of America" + }, + { + "slug": "west-european-politics", + "label": "West European Politics" + }, + { + "slug": "western-journal-of-emergency-medicine", + "label": "Western Journal of Emergency Medicine" + }, + { + "slug": "westfalische-wilhelms-universitat-munster-medizinische-fakultat", + "label": "Westfälische Wilhelms-Universität Münster - Medizinische Fakultät (Deutsch)" + }, + { + "slug": "wetlands", + "label": "Wetlands" + }, + { + "slug": "wheaton-college-phd-in-biblical-and-theological-studies", + "label": "Wheaton College - Ph.D. in Biblical and Theological Studies" + }, + { + "slug": "who-europe-harvard", + "label": "WHO Regional Office for Europe - Harvard" + }, + { + "slug": "who-europe-numeric", + "label": "WHO Regional Office for Europe (numeric)" + }, + { + "slug": "wiesbaden-business-school", + "label": "Wiesbaden Business School" + }, + { + "slug": "wikipedia-templates", + "label": "Wikipedia Templates" + }, + { + "slug": "wiley-vch-books", + "label": "Wiley-VCH books" + }, + { + "slug": "wiley-was", + "label": "Wiley Analytical Science" + }, + { + "slug": "wireless-communications-and-mobile-computing", + "label": "Wireless Communications and Mobile Computing" + }, + { + "slug": "wirtschaftsuniversitat-wien-abteilung-fur-bildungswissenschaft", + "label": "Wirtschaftsuniversität Wien - Abteilung für Bildungswissenschaft (Deutsch - Österreich)" + }, + { + "slug": "wirtschaftsuniversitat-wien-author-date", + "label": "Wirtschaftsuniversität Wien (author-date)" + }, + { + "slug": "wirtschaftsuniversitat-wien-handel-und-marketing", + "label": "Wirtschaftsuniversität Wien - Handel und Marketing (Deutsch - Österreich)" + }, + { + "slug": "wirtschaftsuniversitat-wien-health-care-management", + "label": "Wirtschaftsuniversität Wien - Health Care Management" + }, + { + "slug": "wirtschaftsuniversitat-wien-institut-fur-bwl-des-aussenhandels", + "label": "Wirtschaftsuniversität Wien - Institut für BWL des Außenhandels (Deutsch - Österreich)" + }, + { + "slug": "wirtschaftsuniversitat-wien-institut-fur-transportwirtschaft-und-logistik", + "label": "Wirtschaftsuniversität Wien - Institut für Transportwirtschaft und Logistik (Deutsch - Österreich)" + }, + { + "slug": "wirtschaftsuniversitat-wien-unternehmensrechnung-und-controlling", + "label": "Wirtschaftsuniversität Wien - Unternehmensrechnung und Controlling" + }, + { + "slug": "wirtschaftsuniversitat-wien-wirtschaftspadagogik", + "label": "Wirtschaftsuniversität Wien - Wirtschaftspädagogik (Deutsch - Österreich)" + }, + { + "slug": "wissenschaftlicher-industrielogistik-dialog", + "label": "Wissenschaftlicher Industrielogistik-Dialog (Deutsch - Österreich)" + }, + { + "slug": "wolters-kluwerbrede-schrijfwijzer-author-date", + "label": "Wolters Kluwerbrede Schrijfwijzer (author-date, Nederlands)" + }, + { + "slug": "world-applied-sciences-journal", + "label": "World Applied Sciences Journal" + }, + { + "slug": "world-congress-on-engineering-asset-management", + "label": "World Congress on Engineering Asset Management 2010" + }, + { + "slug": "world-mycotoxin-journal", + "label": "World Mycotoxin Journal" + }, + { + "slug": "world-organisation-for-animal-health-scientific-and-technical-review", + "label": "World Organisation for Animal Health - Scientific and Technical Review" + }, + { + "slug": "world-politics", + "label": "World Politics" + }, + { + "slug": "worlds-poultry-science-journal", + "label": "World's Poultry Science Journal" + }, + { + "slug": "worlds-veterinary-journal", + "label": "World's Veterinary Journal" + }, + { + "slug": "xenotransplantation", + "label": "Xenotransplantation" + }, + { + "slug": "yeast", + "label": "Yeast" + }, + { + "slug": "yozgat-bozok-universitesi-fen-bilimleri-enstitusu", + "label": "Yozgat Bozok Üniversitesi - Fen Bilimleri Enstitüsü (Türkçe)" + }, + { + "slug": "zastosowania-komputerow-w-elektrotechnice", + "label": "Zastosowania Komputerów w Elektrotechnice" + }, + { + "slug": "zdfm-zeitschrift-fur-diversitatsforschung-und-management", + "label": "ZDfm – Zeitschrift für Diversitätsforschung und -management (Deutsch - Österreich)" + }, + { + "slug": "zdravniski-vestnik", + "label": "Zdravniški Vestnik (Slovenian Medical Journal)" + }, + { + "slug": "zeitgeschichte", + "label": "Zeitgeschichte (Deutsch)" + }, + { + "slug": "zeithistorische-forschungen", + "label": "Zeithistorische Forschungen/Studies in Contemporary History" + }, + { + "slug": "zeitschrift-fur-allgemeinmedizin", + "label": "Zeitschrift für Allgemeinmedizin" + }, + { + "slug": "zeitschrift-fur-antikes-christentum", + "label": "Zeitschrift für Antikes Christentum (Journal of Ancient Christianity) (English)" + }, + { + "slug": "zeitschrift-fur-deutsche-philologie", + "label": "Zeitschrift für deutsche Philologie (Deutsch)" + }, + { + "slug": "zeitschrift-fur-die-geschichte-des-oberrheins", + "label": "Zeitschrift für die Geschichte des Oberrheins (Deutsch)" + }, + { + "slug": "zeitschrift-fur-digitale-geisteswissenschaften", + "label": "Zeitschrift für digitale Geisteswissenschaften (Deutsch)" + }, + { + "slug": "zeitschrift-fur-fantastikforschung", + "label": "Zeitschrift für Fantastikforschung (Deutsch)" + }, + { + "slug": "zeitschrift-fur-geschichtsdidaktik", + "label": "Zeitschrift für Geschichtsdidaktik (Deutsch)" + }, + { + "slug": "zeitschrift-fur-internationale-beziehungen", + "label": "Zeitschrift für Internationale Beziehungen (Deutsch)" + }, + { + "slug": "zeitschrift-fur-kunstgeschichte", + "label": "Zeitschrift für Kunstgeschichte" + }, + { + "slug": "zeitschrift-fur-medien-und-kulturforschung", + "label": "Zeitschrift für Medien- und Kulturforschung (Deutsch)" + }, + { + "slug": "zeitschrift-fur-medienwissenschaft", + "label": "Zeitschrift für Medienwissenschaft (Deutsch)" + }, + { + "slug": "zeitschrift-fur-ostmitteleuropa-forschung", + "label": "Zeitschrift für Ostmitteleuropa-Forschung (Deutsch)" + }, + { + "slug": "zeitschrift-fur-padagogik", + "label": "Zeitschrift für Pädagogik (Deutsch)" + }, + { + "slug": "zeitschrift-fur-papyrologie-und-epigraphik", + "label": "Zeitschrift für Papyrologie und Epigraphik" + }, + { + "slug": "zeitschrift-fur-parlamentsfragen", + "label": "Zeitschrift für Parlamentsfragen (Deutsch)" + }, + { + "slug": "zeitschrift-fur-politik", + "label": "Zeitschrift für Politik (German)" + }, + { + "slug": "zeitschrift-fur-qualitative-forschung", + "label": "Zeitschrift für Qualitative Forschung (Deutsch)" + }, + { + "slug": "zeitschrift-fur-religionswissenschaft-author-date", + "label": "Zeitschrift für Religionswissenschaft (author-date)" + }, + { + "slug": "zeitschrift-fur-religionswissenschaft-note", + "label": "Zeitschrift für Religionswissenschaft (note)" + }, + { + "slug": "zeitschrift-fur-soziologie", + "label": "Zeitschrift für Soziologie (Deutsch)" + }, + { + "slug": "zeitschrift-fur-theologie-und-kirche", + "label": "Zeitschrift für Theologie und Kirche (Deutsch)" + }, + { + "slug": "zeitschrift-fur-theologie-und-philosophie", + "label": "Zeitschrift für Theologie und Philosophie" + }, + { + "slug": "zeitschrift-fur-zahnarztliche-implantologie", + "label": "Zeitschrift für Zahnärztliche Implantologie (Deutsch)" + }, + { + "slug": "zeszyty-prawnicze-bas", + "label": "Zeszyty Prawnicze BAS (Polski)" + }, + { + "slug": "zilsel", + "label": "Zilsel (Français)" + }, + { + "slug": "zitierguide-leitfaden-zum-fachgerechten-zitieren-in-rechtswissenschaftlichen-arbeiten", + "label": "ZitierGuide: Leitfaden zum fachgerechten Zitieren in rechtswissenschaftlichen Arbeiten (Roger Müller) (Deutsch - Schweiz)" + }, + { + "slug": "zoological-journal-of-the-linnean-society", + "label": "Zoological Journal of the Linnean Society" + }, + { + "slug": "zootaxa", + "label": "Zootaxa" + }, + { + "slug": "zwitscher-maschine", + "label": "Zwitscher-Maschine" + } +] diff --git a/src/sections/shared/citation/citation-download/csl/useDefaultStyleCitation.ts b/src/sections/shared/citation/citation-download/csl/useDefaultStyleCitation.ts new file mode 100644 index 000000000..6f70ef4bf --- /dev/null +++ b/src/sections/shared/citation/citation-download/csl/useDefaultStyleCitation.ts @@ -0,0 +1,76 @@ +import { useEffect, useState } from 'react' +import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository' +import { getDatasetCitationInOtherFormats } from '@/dataset/domain/useCases/getDatasetCitationInOtherFormats' +import { CitationFormat, FormattedCitation } from '@/dataset/domain/models/DatasetCitation' +import { Utils } from '@/shared/helpers/Utils' +import { formatCitationAsHtml, CslJsonItem } from './citeprocEngine' +import { DEFAULT_CSL_STYLE_SLUG } from './cslStyleOptions' + +interface UseDefaultStyleCitationParams { + datasetRepository: DatasetRepository + datasetId: string + version: string +} + +interface UseDefaultStyleCitationResult { + cslJsonCitation: FormattedCitation | null + defaultStyleCitationHtml: string | null + defaultStyleCitationText: string + isFetching: boolean +} + +export function useDefaultStyleCitation({ + datasetRepository, + datasetId, + version +}: UseDefaultStyleCitationParams): UseDefaultStyleCitationResult { + const [cslJsonCitation, setCslJsonCitation] = useState(null) + const [defaultStyleCitationHtml, setDefaultStyleCitationHtml] = useState(null) + const [defaultStyleCitationText, setDefaultStyleCitationText] = useState('') + const [isFetching, setIsFetching] = useState(true) + + useEffect(() => { + let cancelled = false + setIsFetching(true) + setCslJsonCitation(null) + setDefaultStyleCitationHtml(null) + setDefaultStyleCitationText('') + Promise.resolve() + .then(() => + getDatasetCitationInOtherFormats( + datasetRepository, + datasetId, + version, + CitationFormat.CSLJson + ) + ) + .then((citation) => { + if (!cancelled) { + setCslJsonCitation(citation) + } + return formatCitationAsHtml( + JSON.parse(citation.content) as CslJsonItem, + DEFAULT_CSL_STYLE_SLUG + ) + }) + .then((html) => { + if (!cancelled) { + setDefaultStyleCitationHtml(html) + setDefaultStyleCitationText(Utils.htmlToPlainText(html)) + } + }) + .catch(() => { + // Silently skip rendering the quick-copy icon if the default-style citation can't be built. + }) + .finally(() => { + if (!cancelled) { + setIsFetching(false) + } + }) + return () => { + cancelled = true + } + }, [datasetRepository, datasetId, version]) + + return { cslJsonCitation, defaultStyleCitationHtml, defaultStyleCitationText, isFetching } +} diff --git a/src/sections/shared/citation/citation-download/csl/useStyledCitation.ts b/src/sections/shared/citation/citation-download/csl/useStyledCitation.ts new file mode 100644 index 000000000..8dda98593 --- /dev/null +++ b/src/sections/shared/citation/citation-download/csl/useStyledCitation.ts @@ -0,0 +1,66 @@ +import { useEffect, useState } from 'react' +import { formatCitationAsHtml, CslJsonItem } from './citeprocEngine' + +interface UseStyledCitationResult { + citationHtml: string | null + isLoading: boolean + error: boolean +} + +export interface StyledCitationSeed { + styleSlug: string + html: string +} + +export function useStyledCitation( + cslJsonItem: CslJsonItem | null, + styleSlug: string, + seed?: StyledCitationSeed | null +): UseStyledCitationResult { + const [citationHtml, setCitationHtml] = useState(null) + const [isLoading, setIsLoading] = useState(false) + const [error, setError] = useState(false) + + useEffect(() => { + if (!cslJsonItem) { + setCitationHtml(null) + setError(false) + setIsLoading(true) + return + } + + if (seed && seed.styleSlug === styleSlug) { + setCitationHtml(seed.html) + setError(false) + setIsLoading(false) + return + } + + let cancelled = false + setIsLoading(true) + setError(false) + formatCitationAsHtml(cslJsonItem, styleSlug) + .then((html) => { + if (!cancelled) { + setCitationHtml(html) + } + }) + .catch(() => { + if (!cancelled) { + setError(true) + } + }) + .finally(() => { + if (!cancelled) { + setIsLoading(false) + } + }) + return () => { + cancelled = true + } + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [cslJsonItem, styleSlug, seed?.styleSlug, seed?.html]) + + return { citationHtml, isLoading, error } +} diff --git a/src/shared/helpers/Utils.ts b/src/shared/helpers/Utils.ts index 5285bdd1e..0b664a457 100644 --- a/src/shared/helpers/Utils.ts +++ b/src/shared/helpers/Utils.ts @@ -44,4 +44,8 @@ export class Utils { return true } + + static htmlToPlainText(html: string): string { + return new DOMParser().parseFromString(html, 'text/html').body.textContent ?? '' + } } diff --git a/src/stories/dataset/DatasetErrorMockRepository.ts b/src/stories/dataset/DatasetErrorMockRepository.ts index 97adb1a3f..2170e5fa8 100644 --- a/src/stories/dataset/DatasetErrorMockRepository.ts +++ b/src/stories/dataset/DatasetErrorMockRepository.ts @@ -15,6 +15,8 @@ import { CollectionSummary } from '@/collection/domain/models/CollectionSummary' import { DatasetVersionPaginationInfo } from '@/dataset/domain/models/DatasetVersionPaginationInfo' import { DatasetUploadLimits } from '@/dataset/domain/models/DatasetUploadLimits' import { DatasetReview } from '@/dataset/domain/models/DatasetReview' +import { ExportedDatasetMetadata } from '@/dataset/domain/models/ExportedDatasetMetadata' +import { DatasetNotNumberedVersion } from '@iqss/dataverse-client-javascript' export class DatasetErrorMockRepository implements DatasetMockRepository { getAllWithCount: ( @@ -156,6 +158,18 @@ export class DatasetErrorMockRepository implements DatasetMockRepository { }) } + exportDatasetMetadata( + _datasetId: string | number, + _exporter: string, + _version?: DatasetNotNumberedVersion.LATEST_PUBLISHED | DatasetNotNumberedVersion.DRAFT + ): Promise { + return new Promise((_resolve, reject) => { + setTimeout(() => { + reject('Error thrown from mock') + }, FakerHelper.loadingTimout()) + }) + } + updateTermsOfAccess(_datasetId: string | number, _termsOfAccess: TermsOfAccess): Promise { return new Promise((_resolve, reject) => { setTimeout(() => { diff --git a/src/stories/dataset/DatasetMockRepository.ts b/src/stories/dataset/DatasetMockRepository.ts index e194cff2b..d63b81934 100644 --- a/src/stories/dataset/DatasetMockRepository.ts +++ b/src/stories/dataset/DatasetMockRepository.ts @@ -21,6 +21,8 @@ import { CollectionSummaryMother } from '@tests/component/collection/domain/mode import { DatasetVersionPaginationInfo } from '@/dataset/domain/models/DatasetVersionPaginationInfo' import { DatasetUploadLimits } from '@/dataset/domain/models/DatasetUploadLimits' import { DatasetReview } from '@/dataset/domain/models/DatasetReview' +import { ExportedDatasetMetadata } from '@/dataset/domain/models/ExportedDatasetMetadata' +import { DatasetNotNumberedVersion } from '@iqss/dataverse-client-javascript' export class DatasetMockRepository implements DatasetRepository { getAllWithCount: ( @@ -171,6 +173,21 @@ export class DatasetMockRepository implements DatasetRepository { }) } + exportDatasetMetadata( + _datasetId: string | number, + _exporter: string, + _version?: DatasetNotNumberedVersion.LATEST_PUBLISHED | DatasetNotNumberedVersion.DRAFT + ): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve({ + content: 'Exported dataset metadata content', + contentType: 'text/plain' + }) + }, FakerHelper.loadingTimout()) + }) + } + updateTermsOfAccess(_datasetId: string | number, _termsOfAccess: TermsOfAccess): Promise { return new Promise((resolve) => { setTimeout(() => { diff --git a/src/stories/dataset/dataset-metadata/DatasetMetadata.stories.tsx b/src/stories/dataset/dataset-metadata/DatasetMetadata.stories.tsx index 0e884e8a6..582ad02bf 100644 --- a/src/stories/dataset/dataset-metadata/DatasetMetadata.stories.tsx +++ b/src/stories/dataset/dataset-metadata/DatasetMetadata.stories.tsx @@ -5,6 +5,8 @@ import { WithAnonymizedView } from '../WithAnonymizedView' import { DatasetMother } from '../../../../tests/component/dataset/domain/models/DatasetMother' import { MetadataBlockInfoMockRepository } from '../../shared-mock-repositories/metadata-block-info/MetadataBlockInfoMockRepository' import { DataverseInfoMockRepository } from '@/stories/shared-mock-repositories/info/DataverseInfoMockRepository' +import { DatasetMockRepository } from '@/stories/dataset/DatasetMockRepository' +import { RepositoriesStoryProvider } from '@/stories/WithRepositories' const meta: Meta = { title: 'Sections/Dataset Page/DatasetMetadata', @@ -20,23 +22,27 @@ const datasetMockAnonymized = DatasetMother.createRealisticAnonymized() export const Default: Story = { render: () => ( - + + + ) } export const AnonymizedView: Story = { decorators: [WithAnonymizedView], render: () => ( - + + + ) } diff --git a/src/stories/file/file-metadata/FileMetadata.stories.tsx b/src/stories/file/file-metadata/FileMetadata.stories.tsx index 3a48322b9..533118f88 100644 --- a/src/stories/file/file-metadata/FileMetadata.stories.tsx +++ b/src/stories/file/file-metadata/FileMetadata.stories.tsx @@ -5,6 +5,8 @@ import { FileMetadataMother } from '../../../../tests/component/files/domain/mod import { FilePermissionsMother } from '../../../../tests/component/files/domain/models/FilePermissionsMother' import { DatasetVersionMother } from '@tests/component/dataset/domain/models/DatasetMother' import { DataverseInfoMockRepository } from '@/stories/shared-mock-repositories/info/DataverseInfoMockRepository' +import { DatasetMockRepository } from '@/stories/dataset/DatasetMockRepository' +import { RepositoriesStoryProvider } from '@/stories/WithRepositories' const meta: Meta = { title: 'Sections/File Page/FileMetadata', @@ -17,13 +19,15 @@ type Story = StoryObj export const Default: Story = { render: () => ( - + + + ) } diff --git a/src/stories/shared-mock-repositories/guestbook/GuestbookMockRepository.ts b/src/stories/shared-mock-repositories/guestbook/GuestbookMockRepository.ts index 076a3155e..cd05488d7 100644 --- a/src/stories/shared-mock-repositories/guestbook/GuestbookMockRepository.ts +++ b/src/stories/shared-mock-repositories/guestbook/GuestbookMockRepository.ts @@ -1,6 +1,6 @@ -import { type Guestbook as JSDataverseGuestbook } from '@iqss/dataverse-client-javascript' import { GuestbookRepository } from '@/guestbooks/domain/repositories/GuestbookRepository' import { Guestbook } from '@/guestbooks/domain/models/Guestbook' +import type { Guestbook as JSDataverseGuestbook } from '@iqss/dataverse-client-javascript' export const storybookGuestbook: Guestbook = { id: 3, @@ -34,7 +34,9 @@ export const storybookClientGuestbooks: JSDataverseGuestbook[] = [ positionRequired: storybookGuestbook.positionRequired, createTime: storybookGuestbook.createTime, dataverseId: storybookGuestbook.dataverseId, - customQuestions: storybookGuestbook.customQuestions + customQuestions: storybookGuestbook.customQuestions.map(({ id, ...question }) => + typeof id === 'number' ? { ...question, id } : question + ) } ] @@ -44,7 +46,7 @@ export class GuestbookMockRepository implements GuestbookRepository { } getGuestbooksByCollectionId(_collectionIdOrAlias: number | string): Promise { - return Promise.resolve(storybookClientGuestbooks as Guestbook[]) + return Promise.resolve([storybookGuestbook]) } assignDatasetGuestbook(_datasetId: number | string, _guestbookId: number): Promise { diff --git a/tests/component/fixtures/citation/dependent-style.csl b/tests/component/fixtures/citation/dependent-style.csl new file mode 100644 index 000000000..4f3598ff4 --- /dev/null +++ b/tests/component/fixtures/citation/dependent-style.csl @@ -0,0 +1,9 @@ + + diff --git a/tests/component/fixtures/citation/locales-en-US.xml b/tests/component/fixtures/citation/locales-en-US.xml new file mode 100644 index 000000000..864f1a71e --- /dev/null +++ b/tests/component/fixtures/citation/locales-en-US.xml @@ -0,0 +1,4 @@ + + + + diff --git a/tests/component/fixtures/citation/numbered-style.csl b/tests/component/fixtures/citation/numbered-style.csl new file mode 100644 index 000000000..ba750a22d --- /dev/null +++ b/tests/component/fixtures/citation/numbered-style.csl @@ -0,0 +1,19 @@ + + diff --git a/tests/component/fixtures/citation/test-style-b.csl b/tests/component/fixtures/citation/test-style-b.csl new file mode 100644 index 000000000..682efc9df --- /dev/null +++ b/tests/component/fixtures/citation/test-style-b.csl @@ -0,0 +1,20 @@ + + diff --git a/tests/component/fixtures/citation/test-style.csl b/tests/component/fixtures/citation/test-style.csl new file mode 100644 index 000000000..1c5fcdd72 --- /dev/null +++ b/tests/component/fixtures/citation/test-style.csl @@ -0,0 +1,18 @@ + + diff --git a/tests/component/sections/collection/collection-items-panel/file-card/FileCard.spec.tsx b/tests/component/sections/collection/collection-items-panel/file-card/FileCard.spec.tsx index 0d4259211..b22397587 100644 --- a/tests/component/sections/collection/collection-items-panel/file-card/FileCard.spec.tsx +++ b/tests/component/sections/collection/collection-items-panel/file-card/FileCard.spec.tsx @@ -7,7 +7,7 @@ import { PublicationStatus } from '@/shared/core/domain/models/PublicationStatus describe('FileCard', () => { it('should render the card', () => { const userRoles = ['Admin', 'Contributor'] - const filePreview = FileItemTypePreviewMother.create({ userRoles: userRoles }) + const filePreview = FileItemTypePreviewMother.createRealistic({ userRoles: userRoles }) cy.customMount() filePreview.restricted diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx index 6d855e0d9..bff5aa4c0 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx @@ -27,6 +27,17 @@ describe('CopyToClipboardButton', () => { cy.findByText('Click to copy Sample text to copy').should('exist') }) + it('shows a custom tooltip when tooltipText is provided', () => { + const textToCopy = 'Sample text to copy' + cy.customMount( + + ) + + cy.findByRole('button', { name: /Copy to clipboard icon/ }).trigger('mouseover') + cy.findByText('Copy citation to clipboard').should('exist') + cy.findByText(`Click to copy ${textToCopy}`).should('not.exist') + }) + it('truncates text when it is too long', () => { const textToCopy = '0187a54071542738aa47939e8218e5f2' cy.customMount() diff --git a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx index 7ab8d1e3a..cb3199ef9 100644 --- a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx +++ b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx @@ -1,3 +1,4 @@ +import { ComponentProps } from 'react' import { DatasetMother } from '../../../dataset/domain/models/DatasetMother' import { DatasetMetadata } from '../../../../../src/sections/dataset/dataset-metadata/DatasetMetadata' import { @@ -9,6 +10,8 @@ import { MetadataBlockInfoRepository } from '../../../../../src/metadata-block-i import { MetadataBlockInfoMother } from '../../../metadata-block-info/domain/models/MetadataBlockInfoMother' import { DatasetMetadataExportFormatsMother } from '@tests/component/info/domain/models/DatasetMetadataExportFormatsMother' import { DataverseInfoRepository } from '@/info/domain/repositories/DataverseInfoRepository' +import { WithRepositories } from '@tests/component/WithRepositories' +import { DatasetMockRepository } from '@/stories/dataset/DatasetMockRepository' const mockDataset = DatasetMother.create({ metadataBlocks: [ @@ -209,29 +212,29 @@ describe('DatasetMetadata', () => { .resolves(mockDatasetMetadataExportFormats) }) - it('renders the metadata blocks sections titles correctly', () => { + const mountDatasetMetadata = (props: Partial> = {}) => { cy.customMount( - + + + ) + } + + it('renders the metadata blocks sections titles correctly', () => { + mountDatasetMetadata() cy.findByRole('button', { name: 'Citation Metadata' }).should('exist') cy.findByRole('button', { name: 'Geospatial Metadata' }).should('exist') }) it('renders the metadata blocks fields correctly', () => { - cy.customMount( - - ) + mountDatasetMetadata() cy.get('.accordion > :nth-child(1)').within(() => { cy.findByText(/Citation Metadata/i).should('exist') @@ -255,14 +258,7 @@ describe('DatasetMetadata', () => { }) it('renders the metadata blocks fields values correctly', () => { - cy.customMount( - - ) + mountDatasetMetadata() cy.get('.accordion > :nth-child(1)').within(() => { cy.findByText(/Citation Metadata/i).should('exist') @@ -333,28 +329,23 @@ describe('DatasetMetadata', () => { metadataBlockInfoRepository.getByName = cy.stub().resolves(metadataBlockInfoMock) cy.customMount( - - - + + + + + ) cy.findAllByText(ANONYMIZED_FIELD_VALUE).should('exist') }) it('shows a tip for dataset contact field', () => { - cy.customMount( - - ) + mountDatasetMetadata() cy.findByText('Use email button above to contact.').should('exist') }) @@ -364,14 +355,7 @@ describe('DatasetMetadata', () => { .stub() .rejects(new Error('Error getting metadata block display info')) - cy.customMount( - - ) + mountDatasetMetadata() cy.findAllByTestId('ds-metadata-block-display-format-error').should('exist') cy.contains('Error getting metadata block display info').should('not.exist') @@ -415,14 +399,7 @@ describe('DatasetMetadata', () => { } ] }) - cy.customMount( - - ) + mountDatasetMetadata({ dataset: mockDataset }) cy.findByRole('button', { name: 'Citation Metadata' }).should('exist') cy.findByRole('button', { name: 'Geospatial Metadata' }).should('not.exist') @@ -475,14 +452,7 @@ describe('DatasetMetadata', () => { ] }) - cy.customMount( - - ) + mountDatasetMetadata({ dataset: mockDatasetWithExtraFields }) cy.get('.accordion > :nth-child(1)').within(() => { cy.findByText(/Citation Metadata/i).should('exist') diff --git a/tests/component/sections/dataset/dataset-metadata/ExportMetadataDropdown.spec.tsx b/tests/component/sections/dataset/dataset-metadata/ExportMetadataDropdown.spec.tsx index 1038b757f..6cd07b18a 100644 --- a/tests/component/sections/dataset/dataset-metadata/ExportMetadataDropdown.spec.tsx +++ b/tests/component/sections/dataset/dataset-metadata/ExportMetadataDropdown.spec.tsx @@ -1,12 +1,22 @@ import { DataverseInfoRepository } from '@/info/domain/repositories/DataverseInfoRepository' import { ExportMetadataDropdown } from '@/sections/dataset/dataset-metadata/export-metadata-dropdown/ExportMetadataDropdown' -import { QueryParamKey } from '@/sections/Route.enum' import { DatasetMetadataExportFormatsMother } from '@tests/component/info/domain/models/DatasetMetadataExportFormatsMother' -import { requireAppConfig } from '@/config' - -const appConfig = requireAppConfig() +import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository' +import { DatasetNotNumberedVersion } from '@iqss/dataverse-client-javascript' +import { WithRepositories } from '@tests/component/WithRepositories' +import { type ComponentProps } from 'react' +import { DatasetVersionMother } from '@tests/component/dataset/domain/models/DatasetMother' +import { DatasetNonNumericVersion, DatasetVersionNumber } from '@/dataset/domain/models/Dataset' +import { DatasetVersionsSummariesMother } from '@tests/component/dataset/domain/models/DatasetVersionsSummariesMother' const dataverseInfoRepository: DataverseInfoRepository = {} as DataverseInfoRepository +const datasetRepository: DatasetRepository = {} as DatasetRepository +let openedWindow: { + closed: boolean + document: { title: string } + location: { href: string } + close: Cypress.Agent +} const mockDatasetMetadataExportFormats = DatasetMetadataExportFormatsMother.create({ foo: { @@ -24,93 +34,200 @@ describe('ExportMetadataDropdown', () => { dataverseInfoRepository.getAvailableDatasetMetadataExportFormats = cy .stub() .resolves(mockDatasetMetadataExportFormats) + datasetRepository.exportDatasetMetadata = cy.stub().as('exportDatasetMetadata').resolves({ + content: 'exported metadata', + contentType: 'application/xml' + }) + datasetRepository.getDatasetVersionsSummaries = cy + .stub() + .as('getDatasetVersionsSummaries') + .resolves({ + summaries: [{ id: 1, versionNumber: '1.0', contributors: 'Admin, Dataverse' }], + totalCount: 1 + }) + + cy.window().then((win) => { + cy.stub(win.URL, 'createObjectURL').as('createObjectURL').returns('blob:exported-metadata') + cy.stub(win.URL, 'revokeObjectURL').as('revokeObjectURL') + openedWindow = { + closed: false, + document: { title: '' }, + location: { href: '' }, + close: cy.stub().as('openedWindowClose') + } + cy.stub(win, 'open') + .as('windowOpen') + .returns(openedWindow as unknown as Window) + }) }) - it('should render export format options', () => { + const mountExportMetadataDropdown = ( + props: Partial> = {} + ) => { cy.customMount( - + + + ) + } + + it('should render export format options', () => { + mountExportMetadataDropdown() cy.findByRole('button', { name: 'Export Metadata' }).click() - Object.entries(mockDatasetMetadataExportFormats).forEach(([key, value]) => { + Object.entries(mockDatasetMetadataExportFormats).forEach(([, value]) => { value.isVisibleInUserInterface ? cy.findByText(value.displayName).should('exist') : cy.findByText(value.displayName).should('not.exist') - const href = `${appConfig.backendUrl}/api/datasets/export?exporter=${key}&${ - QueryParamKey.PERSISTENT_ID - }=${encodeURIComponent(testDatasetPersistentId)}` - if (value.isVisibleInUserInterface) { - cy.findByRole('link', { name: value.displayName }).should('have.attr', 'href', href) + cy.findByRole('button', { name: value.displayName }).should('exist') } }) }) - it('should not render if dataset is not released', () => { - cy.customMount( - - ) + it('should render latest published metadata export for a guest user', () => { + mountExportMetadataDropdown() + + cy.findByRole('button', { name: 'Export Metadata' }).should('exist') + }) + + it('should not render in anonymized view', () => { + mountExportMetadataDropdown({ anonymizedView: true }) cy.findByRole('button', { name: 'Export Metadata' }).should('not.exist') + cy.get('@getDatasetVersionsSummaries').should('not.have.been.called') }) - it('should not render if dataset is deaccessioned and user cannot update dataset', () => { - cy.customMount( - + it('should render latest published metadata export for an admin or owner when a draft exists', () => { + datasetRepository.getDatasetVersionsSummaries = cy + .stub() + .as('getDatasetVersionsSummaries') + .resolves({ + summaries: [ + { + id: 2, + versionNumber: DatasetNonNumericVersion.DRAFT, + contributors: 'Admin, Dataverse' + }, + { id: 1, versionNumber: '1.0', contributors: 'Admin, Dataverse' } + ], + totalCount: 2 + }) + + mountExportMetadataDropdown({ + datasetVersion: DatasetVersionMother.createReleasedWithLatestVersionIsADraft() + }) + + cy.findByRole('button', { name: 'Export Metadata' }).should('exist') + }) + + it('should export metadata using the dataset repository', () => { + mountExportMetadataDropdown() + + cy.findByRole('button', { name: 'Export Metadata' }).click() + cy.findByRole('button', { name: 'OAI_ORE' }).click() + + cy.get('@exportDatasetMetadata').should( + 'have.been.calledWith', + testDatasetPersistentId, + 'OAI_ORE' ) + cy.then(() => { + expect(openedWindow.location.href).to.equal('blob:exported-metadata') + }) + cy.get('@windowOpen').should('have.been.calledWith', '', '_blank') + cy.get('@createObjectURL').should('have.been.called') + cy.get('@revokeObjectURL').should('have.been.calledWith', 'blob:exported-metadata') + }) - cy.findByRole('button', { name: 'Export Metadata' }).should('not.exist') + it('should show an error and close the new tab when exporting metadata fails', () => { + datasetRepository.exportDatasetMetadata = cy + .stub() + .as('exportDatasetMetadata') + .rejects(new Error('Export failed')) + + mountExportMetadataDropdown() + + cy.findByRole('button', { name: 'Export Metadata' }).click() + cy.findByRole('button', { name: 'OAI_ORE' }).click() + + cy.get('@exportDatasetMetadata').should( + 'have.been.calledWith', + testDatasetPersistentId, + 'OAI_ORE' + ) + cy.get('@windowOpen').should('have.been.calledWith', '', '_blank') + cy.get('@openedWindowClose').should('have.been.called') + cy.findByText('There was a problem exporting the dataset metadata. Please try again.').should( + 'exist' + ) }) - it('should render if dataset is deaccessioned and user can update dataset', () => { - cy.customMount( - + it('should render and export draft metadata when dataset version is draft', () => { + mountExportMetadataDropdown({ + datasetVersion: DatasetVersionMother.createDraft() + }) + + cy.findByRole('button', { name: 'Export Metadata' }).click() + cy.findByRole('button', { name: 'OAI_ORE' }).click() + + cy.get('@exportDatasetMetadata').should( + 'have.been.calledWith', + testDatasetPersistentId, + 'OAI_ORE', + DatasetNotNumberedVersion.DRAFT ) + }) + + it('should not render if published dataset version is not latest', () => { + datasetRepository.getDatasetVersionsSummaries = cy + .stub() + .as('getDatasetVersionsSummaries') + .resolves({ + summaries: [{ id: 2, versionNumber: '2.0', contributors: 'Admin, Dataverse' }], + totalCount: 1 + }) + + mountExportMetadataDropdown() + + cy.findByRole('button', { name: 'Export Metadata' }).should('not.exist') + }) + + it('should render for the latest non-deaccessioned published version', () => { + datasetRepository.getDatasetVersionsSummaries = cy + .stub() + .as('getDatasetVersionsSummaries') + .resolves(DatasetVersionsSummariesMother.createDeaccessioned()) + + mountExportMetadataDropdown({ + datasetVersion: DatasetVersionMother.createReleased({ + number: new DatasetVersionNumber(3, 0) + }) + }) cy.findByRole('button', { name: 'Export Metadata' }).should('exist') }) - it('should not render if anonymized view', () => { - cy.customMount( - - ) + it('should render if dataset version is draft, since seeing the draft page at all implies permission to export it', () => { + mountExportMetadataDropdown({ + datasetVersion: DatasetVersionMother.createDraft() + }) + + cy.findByRole('button', { name: 'Export Metadata' }).should('exist') + }) + + it('should not render if dataset is deaccessioned', () => { + mountExportMetadataDropdown({ + datasetVersion: DatasetVersionMother.createDeaccessioned() + }) cy.findByRole('button', { name: 'Export Metadata' }).should('not.exist') }) diff --git a/tests/component/sections/dataset/dataset-metadata/export-metadata-dropdown/useExportMetadata.spec.tsx b/tests/component/sections/dataset/dataset-metadata/export-metadata-dropdown/useExportMetadata.spec.tsx new file mode 100644 index 000000000..c918b2936 --- /dev/null +++ b/tests/component/sections/dataset/dataset-metadata/export-metadata-dropdown/useExportMetadata.spec.tsx @@ -0,0 +1,158 @@ +import { act, renderHook } from '@testing-library/react' +import { ReactNode } from 'react' +import { I18nextProvider } from 'react-i18next' +import { toast } from 'react-toastify' +import { DatasetNotNumberedVersion } from '@iqss/dataverse-client-javascript' +import i18next from '@/i18n' +import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository' +import { useExportMetadata } from '@/sections/dataset/dataset-metadata/export-metadata-dropdown/useExportMetadata' +import { DatasetVersionMother } from '@tests/component/dataset/domain/models/DatasetMother' +import { WithRepositories } from '@tests/component/WithRepositories' + +const testDatasetPersistentId = 'doi:10.70122/FK2/XXXXXX' + +describe('useExportMetadata', () => { + const datasetRepository: DatasetRepository = {} as DatasetRepository + const wrapper = ({ children }: { children: ReactNode }) => ( + + {children} + + ) + let openedWindow: { + closed: boolean + document: { title: string } + location: { href: string } + close: Cypress.Agent + } + + beforeEach(() => { + datasetRepository.exportDatasetMetadata = cy.stub().as('exportDatasetMetadata').resolves({ + content: 'exported metadata', + contentType: 'application/xml' + }) + + cy.clock() + + cy.window().then((win) => { + cy.stub(win.URL, 'createObjectURL').as('createObjectURL').returns('blob:exported-metadata') + cy.stub(win.URL, 'revokeObjectURL').as('revokeObjectURL') + openedWindow = { + closed: false, + document: { title: '' }, + location: { href: '' }, + close: cy.stub().as('openedWindowClose') + } + cy.stub(win, 'open') + .as('windowOpen') + .returns(openedWindow as unknown as Window) + }) + }) + + it('should export latest published metadata in a new tab', () => { + const { result } = renderHook( + () => + useExportMetadata({ + datasetPersistentId: testDatasetPersistentId, + datasetVersion: DatasetVersionMother.createReleased() + }), + { wrapper } + ) + + cy.then(async () => { + await act(async () => { + await result.current.handleExportMetadata('OAI_ORE') + }) + }) + + cy.get('@windowOpen').should('have.been.calledWith', '', '_blank') + cy.get('@exportDatasetMetadata').should( + 'have.been.calledWith', + testDatasetPersistentId, + 'OAI_ORE' + ) + cy.then(() => { + expect(openedWindow.document.title).to.equal('Export Metadata') + expect(openedWindow.location.href).to.equal('blob:exported-metadata') + }) + cy.get('@createObjectURL').should('have.been.called') + cy.tick(1000) + cy.get('@revokeObjectURL').should('have.been.calledWith', 'blob:exported-metadata') + }) + + it('should export draft metadata when dataset version is draft', () => { + const { result } = renderHook( + () => + useExportMetadata({ + datasetPersistentId: testDatasetPersistentId, + datasetVersion: DatasetVersionMother.createDraft() + }), + { wrapper } + ) + + cy.then(async () => { + await act(async () => { + await result.current.handleExportMetadata('OAI_ORE') + }) + }) + + cy.get('@exportDatasetMetadata').should( + 'have.been.calledWith', + testDatasetPersistentId, + 'OAI_ORE', + DatasetNotNumberedVersion.DRAFT + ) + }) + + it('should close the new tab and show an error when export fails', () => { + datasetRepository.exportDatasetMetadata = cy + .stub() + .as('exportDatasetMetadata') + .rejects(new Error('Export failed')) + cy.stub(toast, 'error').as('toastError') + + const { result } = renderHook( + () => + useExportMetadata({ + datasetPersistentId: testDatasetPersistentId, + datasetVersion: DatasetVersionMother.createReleased() + }), + { wrapper } + ) + + cy.then(async () => { + await act(async () => { + await result.current.handleExportMetadata('OAI_ORE') + }) + }) + + cy.get('@openedWindowClose').should('have.been.called') + cy.get('@toastError').should( + 'have.been.calledWith', + 'There was a problem exporting the dataset metadata. Please try again.' + ) + }) + + it('should not export metadata when popup is blocked', () => { + cy.window().then((win) => { + ;(win.open as Cypress.Agent).returns(null) + }) + + const { result } = renderHook( + () => + useExportMetadata({ + datasetPersistentId: testDatasetPersistentId, + datasetVersion: DatasetVersionMother.createReleased() + }), + { wrapper } + ) + + cy.then(async () => { + await act(async () => { + await result.current.handleExportMetadata('OAI_ORE') + }) + }) + + cy.get('@exportDatasetMetadata').should('not.have.been.called') + cy.get('@createObjectURL').should('not.have.been.called') + }) +}) diff --git a/tests/component/sections/file/file-metadata/FileMetadata.spec.tsx b/tests/component/sections/file/file-metadata/FileMetadata.spec.tsx index 8bb3775fe..aee90b8a0 100644 --- a/tests/component/sections/file/file-metadata/FileMetadata.spec.tsx +++ b/tests/component/sections/file/file-metadata/FileMetadata.spec.tsx @@ -1,4 +1,4 @@ -import { FileMetadata } from '../../../../../src/sections/file/file-metadata/FileMetadata' +import { FileMetadata as FileMetadataComponent } from '../../../../../src/sections/file/file-metadata/FileMetadata' import { FileMother } from '../../../files/domain/models/FileMother' import { FileSizeUnit } from '../../../../../src/files/domain/models/FileMetadata' import { @@ -11,12 +11,21 @@ import { import { FilePermissionsMother } from '../../../files/domain/models/FilePermissionsMother' import { DataverseInfoMockRepository } from '@/stories/shared-mock-repositories/info/DataverseInfoMockRepository' import { requireAppConfig } from '@/config' +import { WithRepositories } from '@tests/component/WithRepositories' +import { DatasetMockRepository } from '@/stories/dataset/DatasetMockRepository' +import { type ComponentProps } from 'react' const appConfig = requireAppConfig() const file = FileMother.create() +const FileMetadata = (props: ComponentProps) => ( + + + +) + describe('FileMetadata', () => { - it('renders the File Metadata tab', () => { + const mountFileMetadata = (props: Partial> = {}) => { cy.customMount( { datasetPersistentId={file.datasetPersistentId} datasetVersion={file.datasetVersion} dataverseInfoRepository={new DataverseInfoMockRepository()} + {...props} /> ) + } + it('renders the file metadata', () => { + mountFileMetadata() cy.findByRole('button', { name: 'File Metadata' }).should('exist') }) it('renders the file preview', () => { - cy.customMount( - - ) - + mountFileMetadata() cy.findByText('Preview').should('exist') cy.findByRole('img').should('exist') }) @@ -50,14 +53,16 @@ describe('FileMetadata', () => { it('renders the file labels', () => { const metadataWithLabels = FileMetadataMother.createWithLabelsRealistic() cy.customMount( - + + + ) cy.findByText('File Tags').should('exist') @@ -68,14 +73,16 @@ describe('FileMetadata', () => { it('does not render the file labels when there are no labels', () => { const metadataWithoutLabels = FileMetadataMother.createWithNoLabels() cy.customMount( - + + + ) cy.findByText('File Tags').should('not.exist') @@ -86,14 +93,16 @@ describe('FileMetadata', () => { persistentId: 'doi:10.5072/FK2/ABC123' }) cy.customMount( - + + + ) cy.findByText('File Persistent ID').should('exist') @@ -103,14 +112,16 @@ describe('FileMetadata', () => { it('does not render the file persistent id when there is no persistent id', () => { const metadataWithoutPersistentId = FileMetadataMother.createWithNoPersistentId() cy.customMount( - + + + ) cy.findByText('File Persistent ID').should('not.exist') diff --git a/tests/component/sections/session/SessionProvider.spec.tsx b/tests/component/sections/session/SessionProvider.spec.tsx index 79b575880..8b8b5c4fd 100644 --- a/tests/component/sections/session/SessionProvider.spec.tsx +++ b/tests/component/sections/session/SessionProvider.spec.tsx @@ -74,7 +74,7 @@ describe('SessionProvider', () => {
Sign up
} - />{' '} + /> diff --git a/tests/component/sections/shared/citation/CitationDownloadButton.spec.tsx b/tests/component/sections/shared/citation/CitationDownloadButton.spec.tsx index 48a3520fd..e819f68ac 100644 --- a/tests/component/sections/shared/citation/CitationDownloadButton.spec.tsx +++ b/tests/component/sections/shared/citation/CitationDownloadButton.spec.tsx @@ -1,14 +1,19 @@ import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository' import { CitationDownloadButton } from '../../../../../src/sections/shared/citation/citation-download/CitationDownloadButton' import { FormattedCitation } from '@/dataset/domain/models/DatasetCitation' -import { WithRepositories } from '@tests/component/WithRepositories' import { ViewStyledCitationModal } from '@/sections/shared/citation/citation-download/ViewStyledCitationModal' +import { + CSL_STYLES_BASE_URL, + CSL_LOCALES_BASE_URL, + clearCslCachesForTests +} from '@/sections/shared/citation/citation-download/csl/cslStyleFetcher' +import { WithRepositories } from '@tests/component/WithRepositories' import i18next from '@/i18n' const datasetRepository: DatasetRepository = {} as DatasetRepository const mockCitation: FormattedCitation = { - content: 'Mock Citation', - contentType: 'text/plain' + content: JSON.stringify({ id: 'mock-1', type: 'dataset', title: 'Mock Dataset Title' }), + contentType: 'application/json' } describe('CitationDownloadButton', () => { @@ -20,9 +25,11 @@ describe('CitationDownloadButton', () => { cy.stub(win.URL, 'revokeObjectURL').as('revokeObjectURL') }) - cy.customMount( - {}} citation={mockCitation} /> - ) + clearCslCachesForTests() + cy.intercept('GET', `${CSL_STYLES_BASE_URL}/*.csl`, { fixture: 'citation/test-style.csl' }) + cy.intercept('GET', `${CSL_LOCALES_BASE_URL}/locales-en-US.xml`, { + fixture: 'citation/locales-en-US.xml' + }) }) it('renders the button', () => { @@ -135,6 +142,36 @@ describe('CitationDownloadButton', () => { cy.findByText('View Styled Citation').should('exist') }) + it('shows a quick-copy icon next to the Cite Dataset dropdown that copies the chicago-author-date citation', () => { + datasetRepository.getDatasetCitationInOtherFormats = cy.stub().resolves(mockCitation) + + cy.window().then((win) => { + cy.stub(win.navigator.clipboard, 'writeText').resolves() + }) + + cy.customMount( + + + + ) + + cy.findByRole('button', { name: 'Cite Dataset' }).should('exist') + + cy.findByRole('button', { name: /Copy to clipboard icon/ }).then(($copyButton) => { + cy.findByRole('button', { name: 'Cite Dataset' }).then(($citeDatasetButton) => { + const position = $copyButton[0].compareDocumentPosition($citeDatasetButton[0]) + expect(position & Node.DOCUMENT_POSITION_FOLLOWING).to.be.greaterThan(0) + }) + }) + + cy.findByRole('button', { name: /Copy to clipboard icon/ }).click() + + cy.window().then((win) => { + // eslint-disable-next-line @typescript-eslint/unbound-method + cy.wrap(win.navigator.clipboard.writeText).should('be.calledWithMatch', 'Mock Dataset Title') + }) + }) + it('handles errors when downloading citation', () => { datasetRepository.getDatasetCitationInOtherFormats = cy .stub() @@ -149,8 +186,118 @@ describe('CitationDownloadButton', () => { cy.findByText('An error occurred while downloading the citation').should('exist') }) - it('opens styled citation modal when View Styled Citation is clicked', () => { + it('opens styled citation modal and renders the citation formatted in the default style', () => { + cy.customMount( + {}} citation={mockCitation} /> + ) + + cy.findByText('Styled Citation').should('exist') + cy.findByText('Select a CSL Style').should('exist') + cy.findByText('Mock Dataset Title').should('exist') + cy.findByRole('button', { name: /Copy to clipboard icon/ }).should('exist') + cy.findByRole('dialog').should('exist') + }) + + it('keeps the modal loading when no citation has been provided yet', () => { + cy.customMount( {}} citation={null} />) + + cy.findByRole('dialog').should('exist') + cy.findByLabelText('Toggle options menu').should('be.disabled') + cy.findByRole('button', { name: /Copy to clipboard icon/ }).should( + 'have.attr', + 'aria-disabled', + 'true' + ) + cy.get('[role="status"]').should('exist') + }) + + it('handles malformed CSL-JSON without trying to format or copy it', () => { + const malformedCitation: FormattedCitation = { + content: '{not valid json', + contentType: 'application/json' + } + + cy.customMount( + {}} citation={malformedCitation} /> + ) + + cy.findByLabelText('Toggle options menu').should('be.disabled') + cy.findByRole('button', { name: /Copy to clipboard icon/ }).should( + 'have.attr', + 'aria-disabled', + 'true' + ) + cy.get('[role="status"]').should('exist') + }) + + it('groups CSL styles into Common Styles and More Styles sections', () => { + cy.customMount( + {}} citation={mockCitation} /> + ) + + cy.get('#cslStyle').click() + + cy.findByText('Select...').should('not.exist') + cy.findByText('Common Styles').should('exist') + cy.findByText('More Styles').should('exist') + cy.findByRole('option', { name: 'chicago-author-date' }).should('exist') + cy.findByRole('option', { name: 'ieee' }).should('exist') + + cy.findByPlaceholderText('Search...').type('apa') + + cy.findByText('Common Styles').should('not.exist') + cy.findByText('More Styles').should('not.exist') + cy.findByRole('option', { name: 'apa' }).should('exist') + }) + + it('reformats the citation when a different CSL style is selected', () => { + cy.intercept('GET', `${CSL_STYLES_BASE_URL}/apa.csl`, { fixture: 'citation/test-style-b.csl' }) + + cy.customMount( + {}} citation={mockCitation} /> + ) + + cy.findByText('Mock Dataset Title').should('exist') + + cy.get('#cslStyle').click() + cy.findByPlaceholderText('Search...').type('apa') + cy.findByRole('option', { name: 'apa' }).click() + + cy.findByText('STYLE-B: Mock Dataset Title').should('exist') + }) + + it('hides the bibliography entry number for numbered CSL styles', () => { + cy.intercept('GET', `${CSL_STYLES_BASE_URL}/apa.csl`, { + fixture: 'citation/numbered-style.csl' + }) + + cy.customMount( + {}} citation={mockCitation} /> + ) + + cy.get('#cslStyle').click() + cy.findByPlaceholderText('Search...').type('apa') + cy.findByRole('option', { name: 'apa' }).click() + + cy.findByText('Mock Dataset Title').should('exist') + cy.get('.csl-left-margin').should('exist').and('not.be.visible') + }) + + it('shows an error message when fetching the CSL style fails', () => { + cy.intercept('GET', `${CSL_STYLES_BASE_URL}/*.csl`, { statusCode: 500 }) + + cy.customMount( + {}} citation={mockCitation} /> + ) + + cy.contains('An error occurred while formatting the citation in the selected style').should( + 'exist' + ) + }) + + it('closes styled citation modal when close is triggered', () => { datasetRepository.getDatasetCitationInOtherFormats = cy.stub().resolves(mockCitation) + cy.customMount( @@ -161,12 +308,12 @@ describe('CitationDownloadButton', () => { cy.findByText('View Styled Citation').click() cy.findByRole('dialog').should('exist') - cy.findByText('Select a CSL Style').should('exist') - cy.findByText(mockCitation.content).should('exist') - cy.findByRole('button', { name: /Copy to clipboard icon/ }).should('exist') + cy.findByRole('button', { name: 'Cancel' }).click() + cy.findByRole('dialog').should('not.exist') }) - it('closes styled citation modal when close is triggered', () => { + it('remembers the selected CSL style after closing and reopening the modal', () => { + cy.intercept('GET', `${CSL_STYLES_BASE_URL}/apa.csl`, { fixture: 'citation/test-style-b.csl' }) datasetRepository.getDatasetCitationInOtherFormats = cy.stub().resolves(mockCitation) cy.customMount( @@ -178,10 +325,24 @@ describe('CitationDownloadButton', () => { cy.findByRole('button', { name: 'Cite Dataset' }).click() cy.findByText('View Styled Citation').click() - cy.findByRole('dialog').should('exist') - cy.findByText(mockCitation.content).should('exist') - cy.findByRole('button', { name: 'Cancel' }).click() + cy.get('#cslStyle').click() + cy.findByPlaceholderText('Search...').type('apa') + cy.findByRole('option', { name: 'apa' }).click() + + cy.findByText('Citation in apa style').should('exist') + cy.findByText('STYLE-B: Mock Dataset Title').should('exist') + cy.findByTestId('toggle-inner-content').should('contain.text', 'apa') + + cy.findByRole('button', { name: /close/i }).click() cy.findByRole('dialog').should('not.exist') + + cy.findByRole('button', { name: 'Cite Dataset' }).click() + cy.findByText('View Styled Citation').click() + + cy.findByRole('dialog').should('exist') + cy.findByText('Citation in apa style').should('exist') + cy.findByTestId('toggle-inner-content').should('contain.text', 'apa') + cy.findByText('STYLE-B: Mock Dataset Title').should('exist') }) it('handles error when fetching styled citation', () => { @@ -200,4 +361,25 @@ describe('CitationDownloadButton', () => { cy.findByText('An error occurred while downloading the citation').should('exist') }) + + it('shows an error in the modal instead of spinning forever when the citation fetch fails', () => { + datasetRepository.getDatasetCitationInOtherFormats = cy + .stub() + .rejects(new Error('Citation fetch error')) + + cy.customMount( + + + + ) + + cy.findByRole('button', { name: 'Cite Dataset' }).click() + cy.findByText('View Styled Citation').click() + + cy.findByRole('dialog').should('exist') + cy.findByText( + /An error occurred while formatting the citation in the selected style. Please try a different style or try again later./ + ).should('exist') + cy.get('.spinner-border').should('not.exist') + }) }) diff --git a/tests/component/sections/shared/citation/csl/citeprocEngine.spec.ts b/tests/component/sections/shared/citation/csl/citeprocEngine.spec.ts new file mode 100644 index 000000000..a06c33a25 --- /dev/null +++ b/tests/component/sections/shared/citation/csl/citeprocEngine.spec.ts @@ -0,0 +1,54 @@ +import { formatCitationAsHtml } from '@/sections/shared/citation/citation-download/csl/citeprocEngine' +import { + CSL_STYLES_BASE_URL, + CSL_LOCALES_BASE_URL +} from '@/sections/shared/citation/citation-download/csl/cslStyleFetcher' + +function interceptStyleAndLocale(styleSlug: string, styleFixture: string) { + cy.intercept('GET', `${CSL_STYLES_BASE_URL}/${styleSlug}.csl`, { fixture: styleFixture }) + cy.intercept('GET', `${CSL_LOCALES_BASE_URL}/locales-en-US.xml`, { + fixture: 'citation/locales-en-US.xml' + }) +} + +describe('citeprocEngine', () => { + it('formats a CSL-JSON item as HTML using the given style', () => { + interceptStyleAndLocale('engine-test-style-a', 'citation/test-style.csl') + + cy.then(() => + formatCitationAsHtml( + { id: 'item-1', type: 'dataset', title: 'Mock Dataset Title' }, + 'engine-test-style-a' + ) + ).then((html) => { + expect(html).to.include('csl-entry') + expect(html).to.include('Mock Dataset Title') + }) + }) + + it('HTML-entity-escapes variable content', () => { + interceptStyleAndLocale('engine-test-style-b', 'citation/test-style.csl') + + cy.then(() => + formatCitationAsHtml( + { id: 'item-2', type: 'dataset', title: ' & "quoted"' }, + 'engine-test-style-b' + ) + ).then((html) => { + expect(html).not.to.include('