diff --git a/docs/de/user/shortcuts/assets/accessibility_settings.png b/docs/de/user/shortcuts/assets/accessibility_settings.png new file mode 100644 index 0000000000..bfa991a155 Binary files /dev/null and b/docs/de/user/shortcuts/assets/accessibility_settings.png differ diff --git a/docs/de/user/shortcuts/index.md b/docs/de/user/shortcuts/index.md index 4cc93a2cc6..5e3a8eef3f 100644 --- a/docs/de/user/shortcuts/index.md +++ b/docs/de/user/shortcuts/index.md @@ -47,3 +47,9 @@ Diese können global oder repository-spezifisch sein oder in einem komplett ande Sie werden automatisch in der Übersicht im SCM-Manager mit aufgelistet. Um die Tastenkürzel eines Plugins innerhalb der Benutzerdokumentation zu finden, verweisen wir hier auf die Dokumentation des jeweiligen Plugins. + +### Barrierefreiheit + +Das oben beschriebene System kann in den Profileinstellungen unter "Barrierefreiheit" deaktiviert werden. + +![Einstellungen der Barrierefreiheit](assets/accessibility_settings.png) diff --git a/docs/en/user/shortcuts/assets/accessibility_settings.png b/docs/en/user/shortcuts/assets/accessibility_settings.png new file mode 100644 index 0000000000..03cb65a664 Binary files /dev/null and b/docs/en/user/shortcuts/assets/accessibility_settings.png differ diff --git a/docs/en/user/shortcuts/index.md b/docs/en/user/shortcuts/index.md index 898c2c38f3..4e092827b6 100644 --- a/docs/en/user/shortcuts/index.md +++ b/docs/en/user/shortcuts/index.md @@ -45,3 +45,9 @@ Plugins can introduce new shortcuts. They may be global, repository-specific or connected to an entirely different context. They will automatically be included in the summary generated within the SCM-Manager. To find the shortcuts outside the SCM-Manager, please refer to the documentation of the plugin. + +### Accessibility + +The system described above can be disabled in the profile settings under "Accessibility". + +![Accessibility Settings](assets/accessibility_settings.png) diff --git a/gradle/changelog/accessibility_settings.yaml b/gradle/changelog/accessibility_settings.yaml new file mode 100644 index 0000000000..c4aabecdd8 --- /dev/null +++ b/gradle/changelog/accessibility_settings.yaml @@ -0,0 +1,2 @@ +- type: added + description: Accessibility settings where you can disable keyboard shortcuts ([#2157](https://github.com/scm-manager/scm-manager/pull/2157)) diff --git a/scm-plugins/scm-git-plugin/package.json b/scm-plugins/scm-git-plugin/package.json index 596522f76c..c30675413b 100644 --- a/scm-plugins/scm-git-plugin/package.json +++ b/scm-plugins/scm-git-plugin/package.json @@ -15,7 +15,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/plugin-scripts": "^1.2.2", "@scm-manager/prettier-config": "^2.11.1", @@ -33,4 +33,4 @@ "eslintConfig": { "extends": "@scm-manager/eslint-config" } -} \ No newline at end of file +} diff --git a/scm-plugins/scm-hg-plugin/package.json b/scm-plugins/scm-hg-plugin/package.json index 233d62d34d..2d2b007afc 100644 --- a/scm-plugins/scm-hg-plugin/package.json +++ b/scm-plugins/scm-hg-plugin/package.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/plugin-scripts": "^1.2.2", "@scm-manager/prettier-config": "^2.11.1", @@ -32,4 +32,4 @@ "eslintConfig": { "extends": "@scm-manager/eslint-config" } -} \ No newline at end of file +} diff --git a/scm-plugins/scm-legacy-plugin/package.json b/scm-plugins/scm-legacy-plugin/package.json index 6c4e427e6f..447252cb32 100644 --- a/scm-plugins/scm-legacy-plugin/package.json +++ b/scm-plugins/scm-legacy-plugin/package.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/plugin-scripts": "^1.2.2", "@scm-manager/prettier-config": "^2.11.1", @@ -32,4 +32,4 @@ "eslintConfig": { "extends": "@scm-manager/eslint-config" } -} \ No newline at end of file +} diff --git a/scm-plugins/scm-svn-plugin/package.json b/scm-plugins/scm-svn-plugin/package.json index 48a1a01c36..64819cf2d2 100644 --- a/scm-plugins/scm-svn-plugin/package.json +++ b/scm-plugins/scm-svn-plugin/package.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/plugin-scripts": "^1.2.2", "@scm-manager/prettier-config": "^2.11.1", @@ -32,4 +32,4 @@ "eslintConfig": { "extends": "@scm-manager/eslint-config" } -} \ No newline at end of file +} diff --git a/scm-ui/e2e-tests/package.json b/scm-ui/e2e-tests/package.json index 7dce34b052..ec19822304 100644 --- a/scm-ui/e2e-tests/package.json +++ b/scm-ui/e2e-tests/package.json @@ -17,7 +17,7 @@ "fluent-ffmpeg": "^2.1.2" }, "devDependencies": { - "@scm-manager/eslint-config": "^2.16.0" + "@scm-manager/eslint-config": "^2.17.0" }, "prettier": "@scm-manager/prettier-config", "eslintConfig": { @@ -26,4 +26,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-api/package.json b/scm-ui/ui-api/package.json index 1a1114d54c..0d86409970 100644 --- a/scm-ui/ui-api/package.json +++ b/scm-ui/ui-api/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", @@ -52,4 +52,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-buttons/package.json b/scm-ui/ui-buttons/package.json index fe9684e4fb..ae784414f4 100644 --- a/scm-ui/ui-buttons/package.json +++ b/scm-ui/ui-buttons/package.json @@ -28,7 +28,7 @@ "devDependencies": { "@scm-manager/prettier-config": "^2.11.1", "@scm-manager/ui-api": "2.39.2-SNAPSHOT", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@babel/core": "^7.17.8", "@scm-manager/tsconfig": "^2.12.0", "@storybook/addon-essentials": "^6.4.20", @@ -80,4 +80,4 @@ "publishConfig": { "access": "restricted" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-components/package.json b/scm-ui/ui-components/package.json index 7f07a1743f..2b8cc1d4a8 100644 --- a/scm-ui/ui-components/package.json +++ b/scm-ui/ui-components/package.json @@ -24,7 +24,7 @@ "@scm-manager/ui-shortcuts": "2.39.2-SNAPSHOT", "@scm-manager/ui-text": "2.39.2-SNAPSHOT", "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 71144befea..c96bcc5143 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -1619,6 +1619,16 @@ exports[`Storyshots Footer Default 1`] = ` footer.user.theme +
  • + + footer.user.accessibility + +
  • +
  • + + footer.user.accessibility + +
  • +
  • + + footer.user.accessibility + +
  • +
  • + + footer.user.accessibility + +
  • = ({ me, version, links }) => { + {me?._links?.password && ( )} diff --git a/scm-ui/ui-extensions/package.json b/scm-ui/ui-extensions/package.json index ea45e597c8..83f1b60aeb 100644 --- a/scm-ui/ui-extensions/package.json +++ b/scm-ui/ui-extensions/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", @@ -46,4 +46,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-legacy/package.json b/scm-ui/ui-legacy/package.json index 3f7a51aa83..c60e28fd62 100644 --- a/scm-ui/ui-legacy/package.json +++ b/scm-ui/ui-legacy/package.json @@ -21,7 +21,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/prettier-config": "^2.10.1", "@types/react": "^17.0.1", @@ -43,4 +43,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-modules/package.json b/scm-ui/ui-modules/package.json index a23369c53e..1a81d5f364 100644 --- a/scm-ui/ui-modules/package.json +++ b/scm-ui/ui-modules/package.json @@ -18,7 +18,7 @@ "@scm-manager/babel-preset": "^2.13.1", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/prettier-config": "^2.10.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "tsup": "^5.12.6" }, "babel": { @@ -36,4 +36,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-plugins/package.json b/scm-ui/ui-plugins/package.json index a2e120f0cb..7584333b09 100644 --- a/scm-ui/ui-plugins/package.json +++ b/scm-ui/ui-plugins/package.json @@ -21,7 +21,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/plugin-scripts": "^1.2.2", "@scm-manager/prettier-config": "^2.10.1", @@ -43,4 +43,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-scripts/package.json b/scm-ui/ui-scripts/package.json index e27f9888b7..e5ab0e3610 100644 --- a/scm-ui/ui-scripts/package.json +++ b/scm-ui/ui-scripts/package.json @@ -31,7 +31,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/prettier-config": "^2.10.1", "webpack-bundle-analyzer": "^4.5.0" }, @@ -44,4 +44,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-shortcuts/package.json b/scm-ui/ui-shortcuts/package.json index 22247f4c9d..2a29d63f4e 100644 --- a/scm-ui/ui-shortcuts/package.json +++ b/scm-ui/ui-shortcuts/package.json @@ -27,7 +27,7 @@ "@types/mousetrap": "1.6.5", "@scm-manager/babel-preset": "^2.13.1", "@scm-manager/prettier-config": "^2.10.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/tsconfig": "^2.13.0", "@testing-library/react-hooks": "8.0.1", "@testing-library/react": "12.1.5", diff --git a/scm-ui/ui-styles/package.json b/scm-ui/ui-styles/package.json index aa52251dfe..7437a52a01 100644 --- a/scm-ui/ui-styles/package.json +++ b/scm-ui/ui-styles/package.json @@ -15,7 +15,7 @@ "react-diff-view": "^2.4.10" }, "devDependencies": { - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/prettier-config": "^2.11.1", "css-loader": "^6.5.0", "html-webpack-plugin": "^5.5.0", @@ -31,4 +31,4 @@ "eslintConfig": { "extends": "@scm-manager/eslint-config" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-syntaxhighlighting/package.json b/scm-ui/ui-syntaxhighlighting/package.json index c67a1214b9..b5f5c93ca2 100644 --- a/scm-ui/ui-syntaxhighlighting/package.json +++ b/scm-ui/ui-syntaxhighlighting/package.json @@ -24,7 +24,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", @@ -53,4 +53,4 @@ "publishConfig": { "access": "restricted" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-text/package.json b/scm-ui/ui-text/package.json index 2955a5e3e7..4faf3d59a1 100644 --- a/scm-ui/ui-text/package.json +++ b/scm-ui/ui-text/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", @@ -50,4 +50,4 @@ "publishConfig": { "access": "restricted" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-types/package.json b/scm-ui/ui-types/package.json index 485f27bb99..cee7772700 100644 --- a/scm-ui/ui-types/package.json +++ b/scm-ui/ui-types/package.json @@ -15,7 +15,7 @@ "lint": "eslint src" }, "devDependencies": { - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/tsconfig": "^2.13.0" }, "babel": { @@ -30,4 +30,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-webapp/package.json b/scm-ui/ui-webapp/package.json index 3d58557579..4cc720fbcb 100644 --- a/scm-ui/ui-webapp/package.json +++ b/scm-ui/ui-webapp/package.json @@ -37,7 +37,7 @@ "build": "webpack-cli --mode=production --config=../ui-scripts/src/webpack.config.js" }, "devDependencies": { - "@scm-manager/eslint-config": "^2.16.0", + "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/ui-tests": "2.39.2-SNAPSHOT", "@testing-library/react": "^12.1.5", diff --git a/scm-ui/ui-webapp/public/locales/de/commons.json b/scm-ui/ui-webapp/public/locales/de/commons.json index 110bccb78f..fbb7a523b8 100644 --- a/scm-ui/ui-webapp/public/locales/de/commons.json +++ b/scm-ui/ui-webapp/public/locales/de/commons.json @@ -116,6 +116,15 @@ "displayName": "Systemstandard", "description": "Verwendet die Standardeinstellung des Systems" } + }, + "accessibility": { + "navLink": "Barrierefreiheit", + "subtitle": "Barrierefreiheit", + "deactivateShortcuts": { + "label": "Tastaturkürzel deaktivieren", + "helpText": "Deaktiviert alle speziellen Tastaturkombinationen, welche die Barrierefreiheit beeinträchtigen könnten." + }, + "submit": "Speichern" } }, "password": { @@ -133,7 +142,8 @@ "footer": { "user": { "profile": "Profil", - "theme": "Design" + "theme": "Design", + "accessibility": "Barrierefreiheit" }, "information": { "title": "Information" diff --git a/scm-ui/ui-webapp/public/locales/en/commons.json b/scm-ui/ui-webapp/public/locales/en/commons.json index da6ff47c93..e7ced45456 100644 --- a/scm-ui/ui-webapp/public/locales/en/commons.json +++ b/scm-ui/ui-webapp/public/locales/en/commons.json @@ -117,6 +117,15 @@ "displayName": "System default", "description": "Use the default setting of the system" } + }, + "accessibility": { + "navLink": "Accessibility", + "subtitle": "Accessibility", + "deactivateShortcuts": { + "label": "Deactivate Shortcuts", + "helpText": "Disable all custom shortcuts which could negatively impact accessibility." + }, + "submit": "Submit" } }, "password": { @@ -134,7 +143,8 @@ "footer": { "user": { "profile": "Profile", - "theme": "Theme" + "theme": "Theme", + "accessibility": "Accessibility" }, "information": { "title": "Information" diff --git a/scm-ui/ui-webapp/src/accessibilityConfig.ts b/scm-ui/ui-webapp/src/accessibilityConfig.ts new file mode 100644 index 0000000000..4045cc7b79 --- /dev/null +++ b/scm-ui/ui-webapp/src/accessibilityConfig.ts @@ -0,0 +1,46 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import useLocalStorage from "./useLocalStorage"; +import { useCallback, useState } from "react"; + +const LOCAL_STORAGE_KEY = "scm.accessibility"; + +export type AccessibilityConfig = { + deactivateShortcuts: boolean; +}; + +export const useAccessibilityConfig = () => { + const [value, updateConfig] = useLocalStorage(LOCAL_STORAGE_KEY, { deactivateShortcuts: false }); + const [isLoading, setLoading] = useState(false); + const setValue = useCallback( + (newConfig: AccessibilityConfig) => { + setLoading(true); + updateConfig(newConfig); + window.location.reload(); + }, + [updateConfig] + ); + return { value, setValue, isLoading } as const; +}; diff --git a/scm-ui/ui-webapp/src/containers/Accessibility.tsx b/scm-ui/ui-webapp/src/containers/Accessibility.tsx new file mode 100644 index 0000000000..aaa285a719 --- /dev/null +++ b/scm-ui/ui-webapp/src/containers/Accessibility.tsx @@ -0,0 +1,60 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import React, { FC } from "react"; +import { ButtonGroup, Checkbox, SubmitButton, Subtitle } from "@scm-manager/ui-components"; +import { useTranslation } from "react-i18next"; +import { useForm } from "react-hook-form"; +import { AccessibilityConfig, useAccessibilityConfig } from "../accessibilityConfig"; + +const Accessibility: FC = () => { + const [t] = useTranslation("commons"); + const { value: accessibilityConfig, setValue: setAccessibilityConfig, isLoading } = useAccessibilityConfig(); + const { + register, + handleSubmit, + formState: { isDirty }, + } = useForm({ + mode: "onChange", + defaultValues: accessibilityConfig, + }); + + return ( + <> + {t("profile.accessibility.subtitle")} +
    + + + + + + + ); +}; + +export default Accessibility; diff --git a/scm-ui/ui-webapp/src/containers/Profile.tsx b/scm-ui/ui-webapp/src/containers/Profile.tsx index f2dc0f6b74..2168399895 100644 --- a/scm-ui/ui-webapp/src/containers/Profile.tsx +++ b/scm-ui/ui-webapp/src/containers/Profile.tsx @@ -34,7 +34,7 @@ import { SecondaryNavigationColumn, StateMenuContextProvider, SubNavigation, - urls + urls, } from "@scm-manager/ui-components"; import ChangeUserPassword from "./ChangeUserPassword"; import ProfileInfo from "./ProfileInfo"; @@ -45,6 +45,7 @@ import SetApiKeys from "../users/components/apiKeys/SetApiKeys"; import SetApiKeysNavLink from "../users/components/navLinks/SetApiKeysNavLink"; import { useRequiredMe } from "@scm-manager/ui-api"; import Theme from "./Theme"; +import Accessibility from "./Accessibility"; const Profile: FC = () => { const match = useRouteMatch(); @@ -63,7 +64,7 @@ const Profile: FC = () => { subtitle={t("profile.error-subtitle")} error={{ name: t("profile.error"), - message: t("profile.error-message") + message: t("profile.error-message"), }} /> ); @@ -71,7 +72,7 @@ const Profile: FC = () => { const extensionProps = { me, - url + url, }; return ( @@ -85,6 +86,9 @@ const Profile: FC = () => { + + + {mayChangePassword && ( @@ -120,6 +124,7 @@ const Profile: FC = () => { title={t("profile.settingsNavLink")} > + {mayChangePassword && ( )} diff --git a/scm-ui/ui-webapp/src/shortcuts/usePauseShortcutsWhenModalsActive.ts b/scm-ui/ui-webapp/src/shortcuts/usePauseShortcutsWhenModalsActive.ts index 315d6e813c..fa5d18963d 100644 --- a/scm-ui/ui-webapp/src/shortcuts/usePauseShortcutsWhenModalsActive.ts +++ b/scm-ui/ui-webapp/src/shortcuts/usePauseShortcutsWhenModalsActive.ts @@ -24,6 +24,7 @@ import { useActiveModals } from "@scm-manager/ui-components"; import { usePauseShortcuts } from "@scm-manager/ui-shortcuts"; +import { useAccessibilityConfig } from "../accessibilityConfig"; /** * Keyboard shortcuts are not active in modals using {@link useActiveModals} to determine whether any modals are open. @@ -32,5 +33,8 @@ import { usePauseShortcuts } from "@scm-manager/ui-shortcuts"; */ export default function usePauseShortcutsWhenModalsActive() { const areModalsActive = useActiveModals(); - usePauseShortcuts(areModalsActive); + const { + value: { deactivateShortcuts }, + } = useAccessibilityConfig(); + usePauseShortcuts(deactivateShortcuts || areModalsActive); } diff --git a/scm-ui/ui-webapp/src/useLocalStorage.ts b/scm-ui/ui-webapp/src/useLocalStorage.ts new file mode 100644 index 0000000000..d8107853cb --- /dev/null +++ b/scm-ui/ui-webapp/src/useLocalStorage.ts @@ -0,0 +1,45 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import { useEffect, useState } from "react"; + +export default function useLocalStorage( + key: string, + initialValue: T +): [value: T, setValue: (value: T | ((previousConfig: T) => T)) => void] { + const [value, setValue] = useState(() => { + try { + const item = localStorage.getItem(key); + return item ? JSON.parse(item) : initialValue; + } catch (error) { + // eslint-disable-next-line no-console + console.error(error); + return initialValue; + } + }); + + useEffect(() => localStorage.setItem(key, JSON.stringify(value)), [key, value]); + + return [value, setValue]; +} diff --git a/yarn.lock b/yarn.lock index 326aebca5e..1b61495c1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2242,7 +2242,7 @@ "@babel/preset-typescript" "^7.16.7" babel-plugin-styled-components "^1.13.3" -"@scm-manager/eslint-config@2.17.0": +"@scm-manager/eslint-config@2.17.0", "@scm-manager/eslint-config@^2.17.0": version "2.17.0" resolved "https://registry.yarnpkg.com/@scm-manager/eslint-config/-/eslint-config-2.17.0.tgz#b29b65f131a520cb47b5355d16fac99beb1ca881" integrity sha512-wbYI6g09NNhpyHSjRwStB7P0xRE6WxC30HZzmNpTN+2aqI0UZidkybCzTKMjAwW587uitg0z1g/cbntyXwYQFw== @@ -2262,27 +2262,6 @@ eslint-plugin-react-hooks "^2.1.2" jest "^26.6.3" -"@scm-manager/eslint-config@^2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@scm-manager/eslint-config/-/eslint-config-2.16.0.tgz#fe682a1e1d53355c13fff8bffd9b44505e734a63" - integrity sha512-x1o+2RKnTOkuEfNz6zAir6lAaapBWtwy7PLMrs+d7i5kEfE9gJwNOYZqORxBdGZ3u3r6w/PJCc+LNEmOHdwxUA== - dependencies: - "@typescript-eslint/eslint-plugin" "^5.19.0" - "@typescript-eslint/parser" "^5.19.0" - babel-eslint "^10.0.3" - eslint "^7.32.0" - eslint-config-airbnb-base "^14.2.0" - eslint-config-prettier "^6.4.0" - eslint-config-react-app "^5.0.2" - eslint-plugin-flowtype "^4.3.0" - eslint-plugin-import "^2.18.2" - eslint-plugin-jsx-a11y "^6.2.3" - eslint-plugin-prettier "^3.1.1" - eslint-plugin-react "^7.16.0" - eslint-plugin-react-hooks "^2.1.2" - eslint-plugin-tailwindcss "^3.6.0" - jest "^26.6.3" - "@scm-manager/integration-test-runner@^3.3.0": version "3.4.1" resolved "https://registry.yarnpkg.com/@scm-manager/integration-test-runner/-/integration-test-runner-3.4.1.tgz#6b7745cda03b44456e1e7e6e15762748406e1503" @@ -4764,21 +4743,12 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-node@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - acorn-walk@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn-walk@^7.0.0, acorn-walk@^7.1.1, acorn-walk@^7.2.0: +acorn-walk@^7.1.1, acorn-walk@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== @@ -4798,7 +4768,7 @@ acorn@^6.0.1, acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0, acorn@^7.4.1: +acorn@^7.1.1, acorn@^7.4.0, acorn@^7.4.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -5034,11 +5004,6 @@ are-we-there-yet@^2.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -6190,7 +6155,7 @@ camel-case@^4.1.1, camel-case@^4.1.2: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase-css@2.0.1, camelcase-css@^2.0.1: +camelcase-css@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== @@ -6682,7 +6647,7 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@^1.1.4, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -7579,11 +7544,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -7703,25 +7663,11 @@ detect-port@^1.3.0: address "^1.0.1" debug "^2.6.0" -detective@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" - integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== - dependencies: - acorn-node "^1.8.2" - defined "^1.0.0" - minimist "^1.2.6" - devtools-protocol@0.0.1019158: version "0.0.1019158" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz#4b08d06108a784a2134313149626ba55f030a86f" integrity sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ== -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - diff-match-patch@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" @@ -7780,11 +7726,6 @@ discontinuous-range@1.0.0: resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -8547,15 +8488,6 @@ eslint-plugin-react@^7.16.0: semver "^6.3.0" string.prototype.matchall "^4.0.7" -eslint-plugin-tailwindcss@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.6.0.tgz#b29605a53b5c27b7e74986ca7fcc0c6bdc435ad3" - integrity sha512-gWLGNWHuhh5ngwkJ2sgSByanpRw2s5GdrM2ff2/w8Ho2mWh2MyGvpnFZpL4b0XT/C0WF9zlq57+vFHJOeFhMkg== - dependencies: - fast-glob "^3.2.5" - postcss "^8.4.4" - tailwindcss "^3.1.3" - eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -8958,7 +8890,7 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-glob@^3.2.11, fast-glob@^3.2.5, fast-glob@^3.2.9: +fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -9630,13 +9562,6 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - glob-promise@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-3.4.0.tgz#b6b8f084504216f702dc2ce8c9bc9ac8866fdb20" @@ -13943,11 +13868,6 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - object-inspect@^1.12.0, object-inspect@^1.7.0, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -14591,7 +14511,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.0, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== @@ -14805,22 +14725,6 @@ postcss-flexbugs-fixes@^4.2.1: dependencies: postcss "^7.0.26" -postcss-import@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" - integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" - integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== - dependencies: - camelcase-css "^2.0.1" - postcss-load-config@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" @@ -14829,7 +14733,7 @@ postcss-load-config@2.0.0: cosmiconfig "^4.0.0" import-cwd "^2.0.0" -postcss-load-config@^3.0.1, postcss-load-config@^3.1.4: +postcss-load-config@^3.0.1: version "3.1.4" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== @@ -14982,13 +14886,6 @@ postcss-modules@4.3.1: postcss-modules-values "^4.0.0" string-hash "^1.1.1" -postcss-nested@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc" - integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== - dependencies: - postcss-selector-parser "^6.0.6" - postcss-normalize-charset@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" @@ -15075,7 +14972,7 @@ postcss-reduce-transforms@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.10" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== @@ -15098,7 +14995,7 @@ postcss-unique-selectors@^5.1.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -15111,7 +15008,7 @@ postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0 picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.1.10, postcss@^8.2.1, postcss@^8.2.15, postcss@^8.4.12, postcss@^8.4.14, postcss@^8.4.4, postcss@^8.4.7: +postcss@^8.1.10, postcss@^8.2.1, postcss@^8.2.15, postcss@^8.4.12, postcss@^8.4.7: version "8.4.14" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== @@ -15507,11 +15404,6 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - raf@^3.4.0, raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -15923,13 +15815,6 @@ react@^17.0.1: loose-envify "^1.1.0" object-assign "^4.1.1" -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -16707,7 +16592,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.3.2, resolve@^1.9.0: +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.3.2, resolve@^1.9.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -18060,34 +17945,6 @@ table@^6.0.9: string-width "^4.2.3" strip-ansi "^6.0.1" -tailwindcss@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.6.tgz#bcb719357776c39e6376a8d84e9834b2b19a49f1" - integrity sha512-7skAOY56erZAFQssT1xkpk+kWt2NrO45kORlxFPXUt3CiGsVPhH1smuH5XoDH6sGPXLyBv+zgCKA2HWBsgCytg== - dependencies: - arg "^5.0.2" - chokidar "^3.5.3" - color-name "^1.1.4" - detective "^5.2.1" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.2.11" - glob-parent "^6.0.2" - is-glob "^4.0.3" - lilconfig "^2.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.14" - postcss-import "^14.1.0" - postcss-js "^4.0.0" - postcss-load-config "^3.1.4" - postcss-nested "5.0.6" - postcss-selector-parser "^6.0.10" - postcss-value-parser "^4.2.0" - quick-lru "^5.1.1" - resolve "^1.22.1" - tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -19937,7 +19794,7 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==