diff --git a/README.md b/README.md
index 1d5ce40f..d80e5085 100644
--- a/README.md
+++ b/README.md
@@ -12,17 +12,18 @@ This readme file is used mostly to document project dependencies
npm install
- axios
+ - clsx
- react-router-dom
- react-toastify
- react-loader-spinner
- - js-file-download
- react-tabs
- react-intl
- react-select
- react-error-boundary
- react-pdf
- - reagraph
- react-tooltip
+ - js-file-download
+ - reagraph
- @tanstack/react-table
- @uiw/react-codemirror
- @uiw/codemirror-themes
diff --git a/rsconcept/frontend/README.md b/rsconcept/frontend/README.md
new file mode 100644
index 00000000..8cbcd381
--- /dev/null
+++ b/rsconcept/frontend/README.md
@@ -0,0 +1,21 @@
+# Frontend Developer guidelines
+
+Styling conventions
+- static > conditional static > props. All dynamic styling should go in styles props
+- dimensions = rectangle + outer layout
+
+
+clsx className groupind and order
+
+ - layer: z-position
+ - outer layout: fixed bottom-1/2 left-0 -translate-x-1/2
+ - rectangle: mt-3 w-full min-w-10 h-fit
+ - inner layout: px-3 py-2 flex flex-col gap-3 justify-start items-center
+ - overflow behavior: overflow-auto
+ - border: borer-2 outline-none shadow-md
+ - colors: clr-controls
+ - text: text-start text-sm font-semibold whitespace-nowrap
+ - behavior modifiers: select-none disabled:cursor-not-allowed
+ - transitions:
+
+
\ No newline at end of file
diff --git a/rsconcept/frontend/package-lock.json b/rsconcept/frontend/package-lock.json
index 32144628..c758342c 100644
--- a/rsconcept/frontend/package-lock.json
+++ b/rsconcept/frontend/package-lock.json
@@ -13,6 +13,7 @@
"@uiw/codemirror-themes": "^4.21.21",
"@uiw/react-codemirror": "^4.21.21",
"axios": "^1.6.2",
+ "clsx": "^2.0.0",
"js-file-download": "^0.4.12",
"react": "^18.2.0",
"react-dom": "^18.2.0",
diff --git a/rsconcept/frontend/package.json b/rsconcept/frontend/package.json
index a8cc4bb8..4cbe4713 100644
--- a/rsconcept/frontend/package.json
+++ b/rsconcept/frontend/package.json
@@ -17,6 +17,7 @@
"@uiw/codemirror-themes": "^4.21.21",
"@uiw/react-codemirror": "^4.21.21",
"axios": "^1.6.2",
+ "clsx": "^2.0.0",
"js-file-download": "^0.4.12",
"react": "^18.2.0",
"react-dom": "^18.2.0",
diff --git a/rsconcept/frontend/src/App.tsx b/rsconcept/frontend/src/App.tsx
index 8a5abc9f..73feda82 100644
--- a/rsconcept/frontend/src/App.tsx
+++ b/rsconcept/frontend/src/App.tsx
@@ -1,3 +1,4 @@
+import clsx from 'clsx';
import { createBrowserRouter, Outlet, RouterProvider } from 'react-router-dom';
import ConceptToaster from './components/ConceptToaster';
@@ -21,7 +22,11 @@ function Root() {
const { noNavigation, noFooter, viewportHeight, mainHeight, showScroll } = useConceptTheme();
return (
-
+
-
+
@@ -101,4 +112,4 @@ function App () {
);
}
-export default App;
+export default App;
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/Button.tsx b/rsconcept/frontend/src/components/Common/Button.tsx
index 40e38e69..945f69c0 100644
--- a/rsconcept/frontend/src/components/Common/Button.tsx
+++ b/rsconcept/frontend/src/components/Common/Button.tsx
@@ -1,3 +1,5 @@
+import clsx from 'clsx';
+
import { IColorsProps, IControlProps } from './commonInterfaces';
interface ButtonProps
@@ -17,21 +19,30 @@ function Button({
loading,
...restProps
}: ButtonProps) {
- const borderClass = noBorder ? '' : 'border rounded';
- const padding = dense ? 'px-1' : 'px-3 py-2';
- const outlineClass = noOutline ? 'outline-none': 'clr-outline';
- const cursor = 'disabled:cursor-not-allowed ' + (loading ? 'cursor-progress ' : 'cursor-pointer ');
return (
-
- );
+ );
}
-export default Button;
+export default Button;
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/Checkbox.tsx b/rsconcept/frontend/src/components/Common/Checkbox.tsx
index 74fa52d8..9646c26c 100644
--- a/rsconcept/frontend/src/components/Common/Checkbox.tsx
+++ b/rsconcept/frontend/src/components/Common/Checkbox.tsx
@@ -1,3 +1,4 @@
+import clsx from 'clsx';
import { useMemo } from 'react';
import { CheckboxCheckedIcon } from '../Icons';
@@ -25,14 +26,10 @@ function Checkbox({
} else if (setValue) {
return 'cursor-pointer';
} else {
- return ''
+ return '';
}
}, [disabled, setValue]);
- const bgColor = useMemo(
- () => {
- return value !== false ? 'clr-primary' : 'clr-app'
- }, [value]);
-
+
function handleClick(event: React.MouseEvent): void {
event.preventDefault();
if (disabled || !setValue) {
@@ -42,27 +39,31 @@ function Checkbox({
}
return (
-
- );
+ );
}
-export default Checkbox;
+export default Checkbox;
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/ConceptLoader.tsx b/rsconcept/frontend/src/components/Common/ConceptLoader.tsx
index c19bec4a..9ad8b364 100644
--- a/rsconcept/frontend/src/components/Common/ConceptLoader.tsx
+++ b/rsconcept/frontend/src/components/Common/ConceptLoader.tsx
@@ -10,15 +10,13 @@ interface ConceptLoaderProps {
export function ConceptLoader({size=10}: ConceptLoaderProps) {
const {colors} = useConceptTheme();
-
return (
-
-
-
- );
-}
+
+
+
);
+}
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/ConceptSearch.tsx b/rsconcept/frontend/src/components/Common/ConceptSearch.tsx
index d7220225..bb6a03ba 100644
--- a/rsconcept/frontend/src/components/Common/ConceptSearch.tsx
+++ b/rsconcept/frontend/src/components/Common/ConceptSearch.tsx
@@ -5,31 +5,27 @@ import TextInput from './TextInput';
interface ConceptSearchProps {
value: string
onChange?: (newValue: string) => void
- dense?: boolean
noBorder?: boolean
dimensions?: string
}
-function ConceptSearch({ value, onChange, noBorder, dimensions, dense }: ConceptSearchProps) {
- const borderClass = dense && !noBorder ? 'border-t border-x': '';
+function ConceptSearch({ value, onChange, noBorder, dimensions }: ConceptSearchProps) {
return (
(onChange ? onChange(event.target.value) : undefined)}
/>
);
}
-export default ConceptSearch;
-
-
+export default ConceptSearch;
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/ConceptTab.tsx b/rsconcept/frontend/src/components/Common/ConceptTab.tsx
index 26a3bbb6..c7e67a63 100644
--- a/rsconcept/frontend/src/components/Common/ConceptTab.tsx
+++ b/rsconcept/frontend/src/components/Common/ConceptTab.tsx
@@ -1,3 +1,4 @@
+import clsx from 'clsx';
import type { TabProps } from 'react-tabs';
import { Tab } from 'react-tabs';
@@ -11,7 +12,14 @@ extends Omit {
function ConceptTab({ label, tooltip, className, ...otherProps }: ConceptTabProps) {
return (
@@ -21,4 +29,4 @@ function ConceptTab({ label, tooltip, className, ...otherProps }: ConceptTabProp
ConceptTab.tabsRole = 'Tab';
-export default ConceptTab;
+export default ConceptTab;
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/ConceptTooltip.tsx b/rsconcept/frontend/src/components/Common/ConceptTooltip.tsx
index d93cc884..b9dd2c6c 100644
--- a/rsconcept/frontend/src/components/Common/ConceptTooltip.tsx
+++ b/rsconcept/frontend/src/components/Common/ConceptTooltip.tsx
@@ -1,5 +1,6 @@
'use client';
+import clsx from 'clsx';
import { createPortal } from 'react-dom';
import { ITooltip, Tooltip } from 'react-tooltip';
@@ -26,7 +27,12 @@ function ConceptTooltip({
- );
+ );
}
-export default Divider;
+export default Divider;
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/Dropdown.tsx b/rsconcept/frontend/src/components/Common/Dropdown.tsx
index f2e9a239..17119d1d 100644
--- a/rsconcept/frontend/src/components/Common/Dropdown.tsx
+++ b/rsconcept/frontend/src/components/Common/Dropdown.tsx
@@ -1,16 +1,36 @@
+import clsx from 'clsx';
+
+import Overlay from './Overlay';
+
interface DropdownProps {
- children: React.ReactNode
stretchLeft?: boolean
dimensions?: string
+ children: React.ReactNode
}
-function Dropdown({ children, dimensions = 'w-fit', stretchLeft }: DropdownProps) {
+function Dropdown({
+ dimensions = 'w-fit',
+ stretchLeft,
+ children
+}: DropdownProps) {
return (
- );
+ );
}
-export default Dropdown;
+export default Dropdown;
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/DropdownButton.tsx b/rsconcept/frontend/src/components/Common/DropdownButton.tsx
index 62f56f63..280e201e 100644
--- a/rsconcept/frontend/src/components/Common/DropdownButton.tsx
+++ b/rsconcept/frontend/src/components/Common/DropdownButton.tsx
@@ -1,3 +1,5 @@
+import clsx from 'clsx';
+
interface DropdownButtonProps {
tooltip?: string | undefined
onClick?: () => void
@@ -6,17 +8,24 @@ interface DropdownButtonProps {
}
function DropdownButton({ tooltip, onClick, disabled, children }: DropdownButtonProps) {
- const behavior = onClick ? 'cursor-pointer disabled:cursor-not-allowed clr-hover' : 'cursor-default';
- const text = disabled ? 'text-controls' : '';
return (
);
}
-export default DropdownButton;
+export default DropdownButton;
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/DropdownCheckbox.tsx b/rsconcept/frontend/src/components/Common/DropdownCheckbox.tsx
index 404a8725..c4d08c88 100644
--- a/rsconcept/frontend/src/components/Common/DropdownCheckbox.tsx
+++ b/rsconcept/frontend/src/components/Common/DropdownCheckbox.tsx
@@ -1,3 +1,5 @@
+import clsx from 'clsx';
+
import Checkbox from './Checkbox';
interface DropdownCheckboxProps {
@@ -9,11 +11,15 @@ interface DropdownCheckboxProps {
}
function DropdownCheckbox({ tooltip, setValue, disabled, ...restProps }: DropdownCheckboxProps) {
- const behavior = (setValue && !disabled) ? 'clr-hover' : '';
return (
);
}
-export default DropdownCheckbox;
+export default DropdownCheckbox;
\ No newline at end of file
diff --git a/rsconcept/frontend/src/components/Common/EmbedYoutube.tsx b/rsconcept/frontend/src/components/Common/EmbedYoutube.tsx
index 88fd20d7..db3734ce 100644
--- a/rsconcept/frontend/src/components/Common/EmbedYoutube.tsx
+++ b/rsconcept/frontend/src/components/Common/EmbedYoutube.tsx
@@ -11,13 +11,20 @@ function EmbedYoutube({ videoID, pxHeight, pxWidth }: EmbedYoutubeProps) {
return (