From cc81cc4b6b8c9c1ac77409899f3af47ae68e600d Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Fri, 8 Sep 2023 02:15:20 +0300 Subject: [PATCH] Major UI refactoring: change Select component + colors --- README.md | 2 +- rsconcept/frontend/package-lock.json | 108 ++++++++---- rsconcept/frontend/package.json | 2 +- .../src/components/Common/ConceptSelect.tsx | 19 -- .../components/Common/ConceptSelectSingle.tsx | 66 +++++++ .../frontend/src/components/RSInput/index.tsx | 46 ++--- rsconcept/frontend/src/index.css | 115 +++++------- .../src/pages/RSFormPage/DlgCreateCst.tsx | 34 ++-- .../src/pages/RSFormPage/DlgRenameCst.tsx | 8 +- .../src/pages/RSFormPage/EditorTermGraph.tsx | 38 ++-- rsconcept/frontend/src/utils/color.ts | 164 +++++++++++++----- rsconcept/frontend/src/utils/constants.ts | 1 + rsconcept/frontend/src/utils/staticUI.ts | 32 ++-- 13 files changed, 385 insertions(+), 250 deletions(-) delete mode 100644 rsconcept/frontend/src/components/Common/ConceptSelect.tsx create mode 100644 rsconcept/frontend/src/components/Common/ConceptSelectSingle.tsx diff --git a/README.md b/README.md index fe8f0aca..9995f0eb 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ This readme file is used mostly to document project dependencies - react-tabs - react-intl - react-data-table-component - - react-dropdown-select + - react-select - react-error-boundary - reagraph - react-tooltip diff --git a/rsconcept/frontend/package-lock.json b/rsconcept/frontend/package-lock.json index 09b2fb89..1aab91c2 100644 --- a/rsconcept/frontend/package-lock.json +++ b/rsconcept/frontend/package-lock.json @@ -16,11 +16,11 @@ "react": "^18.2.0", "react-data-table-component": "^7.5.4", "react-dom": "^18.2.0", - "react-dropdown-select": "^4.10.0", "react-error-boundary": "^4.0.11", "react-intl": "^6.4.4", "react-loader-spinner": "^5.4.5", "react-router-dom": "^6.15.0", + "react-select": "^5.7.4", "react-tabs": "^6.0.2", "react-toastify": "^9.1.3", "react-tooltip": "^5.21.3", @@ -2240,28 +2240,6 @@ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, - "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@emotion/stylis": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", @@ -4111,6 +4089,14 @@ "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", @@ -5565,6 +5551,15 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/draco3d": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.6.tgz", @@ -8572,6 +8567,11 @@ "tmpl": "1.0.5" } }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -9342,20 +9342,6 @@ "react": "^18.2.0" } }, - "node_modules/react-dropdown-select": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/react-dropdown-select/-/react-dropdown-select-4.10.0.tgz", - "integrity": "sha512-GiUeZZqN8Z/PQFWyihFeuLwlUQ2IJxiu4ep8Y6bonF8ynUk8dAdLgjg3O4YIa3gtS8/Paeli8AtH46AcaPzWVg==", - "dependencies": { - "@emotion/react": "11.11.1", - "@emotion/styled": "11.11.0" - }, - "peerDependencies": { - "prop-types": ">=15.7.2", - "react": ">=16.x", - "react-dom": ">=16.x" - } - }, "node_modules/react-error-boundary": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-4.0.11.tgz", @@ -9517,6 +9503,26 @@ "react-dom": ">=16.8" } }, + "node_modules/react-select": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.4.tgz", + "integrity": "sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-tabs": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-6.0.2.tgz", @@ -9562,6 +9568,21 @@ "react-dom": ">=16.14.0" } }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/react-use-gesture": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/react-use-gesture/-/react-use-gesture-9.1.3.tgz", @@ -10576,6 +10597,19 @@ "punycode": "^2.1.0" } }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", diff --git a/rsconcept/frontend/package.json b/rsconcept/frontend/package.json index c148923e..85876372 100644 --- a/rsconcept/frontend/package.json +++ b/rsconcept/frontend/package.json @@ -20,11 +20,11 @@ "react": "^18.2.0", "react-data-table-component": "^7.5.4", "react-dom": "^18.2.0", - "react-dropdown-select": "^4.10.0", "react-error-boundary": "^4.0.11", "react-intl": "^6.4.4", "react-loader-spinner": "^5.4.5", "react-router-dom": "^6.15.0", + "react-select": "^5.7.4", "react-tabs": "^6.0.2", "react-toastify": "^9.1.3", "react-tooltip": "^5.21.3", diff --git a/rsconcept/frontend/src/components/Common/ConceptSelect.tsx b/rsconcept/frontend/src/components/Common/ConceptSelect.tsx deleted file mode 100644 index ce936567..00000000 --- a/rsconcept/frontend/src/components/Common/ConceptSelect.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { PropsWithRef } from 'react'; -import Select, { SelectProps } from 'react-dropdown-select'; - -interface ConceptSelectProps -extends Omit>, 'noDataLabel'> { - -} - -function ConceptSelect({ className, ...props }: ConceptSelectProps) { - return ( - 'Список пуст'} + theme={theme => ({ + ...theme, + borderRadius: 0, + colors: { + ...theme.colors, + ...themeColors + }, + })} + styles={adjustedStyles} + {...props} + /> + ); +} + +export default ConceptSelectSingle; diff --git a/rsconcept/frontend/src/components/RSInput/index.tsx b/rsconcept/frontend/src/components/RSInput/index.tsx index adb270fb..85333ac8 100644 --- a/rsconcept/frontend/src/components/RSInput/index.tsx +++ b/rsconcept/frontend/src/components/RSInput/index.tsx @@ -1,6 +1,6 @@ import { Extension } from '@codemirror/state'; -import { tags as t } from '@lezer/highlight'; +import { tags } from '@lezer/highlight'; import { createTheme } from '@uiw/codemirror-themes'; import CodeMirror, { BasicSetupOptions, ReactCodeMirrorProps, ReactCodeMirrorRef } from '@uiw/react-codemirror'; import { EditorView } from 'codemirror'; @@ -64,9 +64,9 @@ function RSInput({ }, [internalRef, innerref]); const cursor = useMemo(() => editable ? 'cursor-text': 'cursor-default', [editable]); - const lightTheme: Extension = useMemo( + const customTheme: Extension = useMemo( () => createTheme({ - theme: 'light', + theme: darkMode ? 'dark' : 'light', settings: { fontFamily: 'inherit', background: editable ? colors.bgInput : colors.bgDefault, @@ -74,35 +74,15 @@ function RSInput({ selection: colors.bgHover }, styles: [ - { tag: t.name, class: 'text-[#b266ff] cursor-default' }, // GlobalID - { tag: t.variableName, class: 'text-[#24821a]' }, // LocalID - { tag: t.propertyName, class: '' }, // Radical - { tag: t.keyword, class: 'text-[#001aff]' }, // keywords - { tag: t.literal, class: 'text-[#001aff]' }, // literals - { tag: t.controlKeyword, class: 'font-semibold'}, // R | I | D - { tag: t.unit, class: 'text-[0.75rem]' }, // indicies + { tag: tags.name, color: colors.fgPurple, cursor: 'default' }, // GlobalID + { tag: tags.variableName, color: colors.fgGreen }, // LocalID + { tag: tags.propertyName, color: colors.fgTeal }, // Radical + { tag: tags.keyword, color: colors.fgBlue }, // keywords + { tag: tags.literal, color: colors.fgBlue }, // literals + { tag: tags.controlKeyword, fontWeight: '500'}, // R | I | D + { tag: tags.unit, fontSize: '0.75rem' }, // indicies ] - }), [editable, colors]); - - const darkTheme: Extension = useMemo( - () => createTheme({ - theme: 'dark', - settings: { - fontFamily: 'inherit', - background: editable ? colors.bgInput : colors.bgDefault, - foreground: colors.fgDefault, - selection: colors.bgHover - }, - styles: [ - { tag: t.name, class: 'text-[#dfbfff] cursor-default' }, // GlobalID - { tag: t.variableName, class: 'text-[#69bf60]' }, // LocalID - { tag: t.propertyName, class: '' }, // Radical - { tag: t.keyword, class: 'text-[#808dff]' }, // keywords - { tag: t.literal, class: 'text-[#808dff]' }, // literals - { tag: t.controlKeyword, class: 'font-semibold'}, // R | I | D - { tag: t.unit, class: 'text-[0.75rem]' }, // indicies - ] - }), [editable, colors]); + }), [editable, colors, darkMode]); const editorExtensions = useMemo( () => [ @@ -137,7 +117,7 @@ function RSInput({ }, [thisRef]); return ( -
+
{label &&