diff --git a/DashAI/front/src/components/HomeButton.jsx b/DashAI/front/src/components/HomeButton.jsx index 85f47a1aa..c678aac80 100644 --- a/DashAI/front/src/components/HomeButton.jsx +++ b/DashAI/front/src/components/HomeButton.jsx @@ -42,10 +42,15 @@ function HomeButton({ title, description, to, Icon }) { alignItems="stretch" sx={{ height: "100%" }} > - + {title} - + {description} @@ -65,10 +70,20 @@ function HomeButton({ title, description, to, Icon }) { - + {title} - + {description} diff --git a/DashAI/front/src/components/ResponsiveAppBar.jsx b/DashAI/front/src/components/ResponsiveAppBar.jsx index 4769f0c42..7ac9889d4 100644 --- a/DashAI/front/src/components/ResponsiveAppBar.jsx +++ b/DashAI/front/src/components/ResponsiveAppBar.jsx @@ -38,7 +38,11 @@ function ResponsiveAppBar() { }; return ( - + - {page.name} + + {page.name} + ))} @@ -108,11 +114,17 @@ function ResponsiveAppBar() { to={page.to} key={page.name} onClick={handleCloseNavMenu} - sx={{ my: 2, display: "block" }} + sx={{ + my: 2, + display: "block", + color: + page.to === location.pathname + ? theme.palette.primary.main + : theme.palette.text.primary, + }} size="large" disabled={page.disabled} disableRipple - color={page.to === location.pathname ? "primary" : "inherit"} > {page.name} diff --git a/DashAI/front/src/components/experiments/DivideDatasetColumns.jsx b/DashAI/front/src/components/experiments/DivideDatasetColumns.jsx index a4b9dab77..07308357d 100644 --- a/DashAI/front/src/components/experiments/DivideDatasetColumns.jsx +++ b/DashAI/front/src/components/experiments/DivideDatasetColumns.jsx @@ -8,6 +8,7 @@ import { Box, Chip, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import { getColorByColumnType } from "../../utils"; function DivideDatasetColumns({ @@ -23,6 +24,8 @@ function DivideDatasetColumns({ outputHelperText = "", disabled = false, }) { + const theme = useTheme(); + const handleInputAutocompleteChange = (event, newValue) => { onInputColumnNamesChange(newValue); }; @@ -43,7 +46,7 @@ function DivideDatasetColumns({ const { key, ...otherProps } = props; const columnType = columnTypes[option]; const typeColor = columnType?.type - ? getColorByColumnType(columnType.type) + ? getColorByColumnType(columnType.type, theme) : null; return ( @@ -76,7 +79,7 @@ function DivideDatasetColumns({ const { key, ...tagProps } = getTagProps({ index }); const columnType = columnTypes[option]; const typeColor = columnType?.type - ? getColorByColumnType(columnType.type) + ? getColorByColumnType(columnType.type, theme) : null; const label = diff --git a/DashAI/front/src/components/experiments/PrepareDatasetStep.jsx b/DashAI/front/src/components/experiments/PrepareDatasetStep.jsx index 2380d65be..5746dfa35 100644 --- a/DashAI/front/src/components/experiments/PrepareDatasetStep.jsx +++ b/DashAI/front/src/components/experiments/PrepareDatasetStep.jsx @@ -9,6 +9,7 @@ import { AlertTitle, Chip, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import DivideDatasetColumns from "./DivideDatasetColumns"; import SplitDatasetRows from "./SplitDatasetRows"; import { @@ -27,6 +28,7 @@ import { getColorByColumnType } from "../../utils"; * @param {function} setNextEnabled function to enable or disable the "Next" button in the modal */ function PrepareDatasetStep({ newExp, setNewExp, setNextEnabled }) { + const theme = useTheme(); const [datasetInfo, setDatasetInfo] = useState({}); const [datasetTypes, setDatasetTypes] = useState({}); const { enqueueSnackbar } = useSnackbar(); diff --git a/DashAI/front/src/components/experiments/metrics/MetricCard.jsx b/DashAI/front/src/components/experiments/metrics/MetricCard.jsx index 7ada1fd2f..f16cf4547 100644 --- a/DashAI/front/src/components/experiments/metrics/MetricCard.jsx +++ b/DashAI/front/src/components/experiments/metrics/MetricCard.jsx @@ -1,23 +1,9 @@ import { Card, CardActionArea, Box, Typography, Chip } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import CheckIcon from "@mui/icons-material/Check"; import TrendingUpIcon from "@mui/icons-material/TrendingUp"; import TrendingDownIcon from "@mui/icons-material/TrendingDown"; -const splitColors = { - train: { - border: "#4caf50", - bg: "rgba(76,175,80,0.08)", - }, - test: { - border: "#2196f3", - bg: "rgba(33,150,243,0.08)", - }, - validation: { - border: "#ff9800", - bg: "rgba(255,152,0,0.08)", - }, -}; - export default function MetricCard({ metric, isSelected, @@ -25,6 +11,23 @@ export default function MetricCard({ splitType, disabled = false, }) { + const theme = useTheme(); + + const splitColors = { + train: { + border: theme.palette.chart.train, + bg: `${theme.palette.chart.train}14`, // ~8% opacity + }, + test: { + border: theme.palette.chart.test, + bg: `${theme.palette.chart.test}14`, + }, + validation: { + border: theme.palette.chart.validation, + bg: `${theme.palette.chart.validation}14`, + }, + }; + const colors = splitColors[splitType]; return ( diff --git a/DashAI/front/src/components/generative/ChatTimeStamp.jsx b/DashAI/front/src/components/generative/ChatTimeStamp.jsx index 3843cf732..ec4501991 100644 --- a/DashAI/front/src/components/generative/ChatTimeStamp.jsx +++ b/DashAI/front/src/components/generative/ChatTimeStamp.jsx @@ -1,13 +1,16 @@ import { Typography } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; export function ChatTimestamp({ timestamp, isUser }) { + const theme = useTheme(); + if (!timestamp) return null; return ( { @@ -21,7 +23,7 @@ export function WaitingAnimationChat({ isActive }) { return ( - + {dots} diff --git a/DashAI/front/src/components/models/DatasetVisualization.jsx b/DashAI/front/src/components/models/DatasetVisualization.jsx index 66bc4d82b..a87c28a78 100644 --- a/DashAI/front/src/components/models/DatasetVisualization.jsx +++ b/DashAI/front/src/components/models/DatasetVisualization.jsx @@ -10,6 +10,7 @@ import { Tabs, Tab, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import { AddCircleOutline as AddIcon } from "@mui/icons-material"; import { getDatasetFile, @@ -35,12 +36,14 @@ export default function DatasetVisualization({ existingSessions = [], tasks = [], }) { + const theme = useTheme(); + if (!dataset) { return ( - + Loading... ); @@ -221,7 +224,7 @@ export default function DatasetVisualization({ {/* Tabs */} - + Processing your dataset... - + {/* Create new item button */} @@ -154,7 +156,7 @@ export default function ModelsLeftBar({ title="New Dataset/Session" /> ) : ( - + Models Module )} @@ -169,7 +171,9 @@ export default function ModelsLeftBar({ /> - + {/* Scrollable content */} @@ -185,7 +189,13 @@ export default function ModelsLeftBar({ getItemDescription={getDatasetDescription} /> - + - Available Models + + Available Models + - + {modelDisplayName} @@ -164,7 +169,10 @@ function RunCard({ values.reduce((sum, val) => sum + val, 0) / values.length; return ( - + {metric.toUpperCase()} @@ -179,7 +187,10 @@ function RunCard({ {/* Description if present */} {run.description && ( - + {run.description} )} @@ -269,7 +280,10 @@ function RunCard({ {/* Goal Metric */} {run.goal_metric && ( - + Goal Metric: {run.goal_metric} diff --git a/DashAI/front/src/components/models/SessionVisualization.jsx b/DashAI/front/src/components/models/SessionVisualization.jsx index 078818fa8..9aac09a85 100644 --- a/DashAI/front/src/components/models/SessionVisualization.jsx +++ b/DashAI/front/src/components/models/SessionVisualization.jsx @@ -215,7 +215,9 @@ export default function SessionVisualization({ mb: 2, }} > - Model Comparison + + Model Comparison + {/* Metric Split Selector */} {showTable && diff --git a/DashAI/front/src/components/models/model/ModelListItem.jsx b/DashAI/front/src/components/models/model/ModelListItem.jsx index c2ef3c6fa..14e3d5b45 100644 --- a/DashAI/front/src/components/models/model/ModelListItem.jsx +++ b/DashAI/front/src/components/models/model/ModelListItem.jsx @@ -1,9 +1,11 @@ import React, { useState } from "react"; import { Box, Typography, Tooltip } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import HoverModelInfo from "./HoverModelInfo"; import { ModelIcon } from "./ModelIcon"; export default function ModelListItem({ model, disabled = false, onClick }) { + const theme = useTheme(); const [anchorEl, setAnchorEl] = useState(null); const [hoveredModel, setHoveredModel] = useState(null); @@ -20,7 +22,8 @@ export default function ModelListItem({ model, disabled = false, onClick }) { }; // Get color and icon from metadata or use defaults - const color = model.color || model.metadata?.color || "#795548"; + const color = + model.color || model.metadata?.color || theme.palette.text.secondary; const iconName = model.metadata?.icon || "Science"; return ( diff --git a/DashAI/front/src/components/notebooks/DescriptionPanel.jsx b/DashAI/front/src/components/notebooks/DescriptionPanel.jsx index 5b4437952..a558daf58 100644 --- a/DashAI/front/src/components/notebooks/DescriptionPanel.jsx +++ b/DashAI/front/src/components/notebooks/DescriptionPanel.jsx @@ -1,12 +1,14 @@ import { Box, Typography } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; export default function DescriptionPanel() { + const theme = useTheme(); return ( - + Note: {message} diff --git a/DashAI/front/src/components/notebooks/RightBar.jsx b/DashAI/front/src/components/notebooks/RightBar.jsx index b7df93504..23b3ef831 100644 --- a/DashAI/front/src/components/notebooks/RightBar.jsx +++ b/DashAI/front/src/components/notebooks/RightBar.jsx @@ -297,7 +297,9 @@ export default function RightBar({ notebook, onToggle }) { justifyContent: "space-between", }} > - Analysis Tools + + Analysis Tools + - + Selected rows:{" "} {selectedRows.length === 0 ? "all" diff --git a/DashAI/front/src/components/notebooks/converter/ConverterBox.jsx b/DashAI/front/src/components/notebooks/converter/ConverterBox.jsx index 2ee63adc2..e929ac400 100644 --- a/DashAI/front/src/components/notebooks/converter/ConverterBox.jsx +++ b/DashAI/front/src/components/notebooks/converter/ConverterBox.jsx @@ -8,6 +8,7 @@ import { CircularProgress, IconButton, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import { Delete } from "@mui/icons-material"; import { DataGrid } from "@mui/x-data-grid"; import Transform from "@mui/icons-material/Transform"; @@ -20,6 +21,7 @@ export default function ConverterBox({ onStatusChange, handleConverterDeleteClick, }) { + const theme = useTheme(); const [converterComponent, setConverterComponent] = useState({}); useEffect(() => { @@ -70,7 +72,11 @@ export default function ConverterBox({ - + {converterComponent.display_name} @@ -121,7 +129,7 @@ export default function ConverterBox({ Step 1: Select Scope - + Here you will configure which columns to apply the converter to. {/* Scope selection UI */} @@ -119,7 +124,10 @@ export default function ScopeStepConverter({ }} onValidationChange={(isValid) => setIsColumnSelectionValid(isValid)} /> - + Here you will configure which rows to apply the converter to. - + Loading... ); diff --git a/DashAI/front/src/components/notebooks/dataset/IssueCard.jsx b/DashAI/front/src/components/notebooks/dataset/IssueCard.jsx index c4e1e4062..a7e753578 100644 --- a/DashAI/front/src/components/notebooks/dataset/IssueCard.jsx +++ b/DashAI/front/src/components/notebooks/dataset/IssueCard.jsx @@ -11,7 +11,7 @@ const IssueCard = ({ title, count, items, severity = "info" }) => { p: 2, border: `1px solid ${palette.light}`, borderRadius: 2, - bgcolor: "#2C2C2C", + bgcolor: theme.palette.ui.panelDark, color: palette.main, display: "flex", flexDirection: "column", diff --git a/DashAI/front/src/components/notebooks/dataset/MetricRow.jsx b/DashAI/front/src/components/notebooks/dataset/MetricRow.jsx index 1d3fbb671..cf938dc28 100644 --- a/DashAI/front/src/components/notebooks/dataset/MetricRow.jsx +++ b/DashAI/front/src/components/notebooks/dataset/MetricRow.jsx @@ -1,13 +1,18 @@ import React from "react"; import { Box, Typography } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; -export const MetricRow = ({ label, value }) => ( - - - {label} - - - {value} - - -); +export const MetricRow = ({ label, value }) => { + const theme = useTheme(); + + return ( + + + {label} + + + {value} + + + ); +}; diff --git a/DashAI/front/src/components/notebooks/dataset/StatBox.jsx b/DashAI/front/src/components/notebooks/dataset/StatBox.jsx index c0b425fb0..a3750bc24 100644 --- a/DashAI/front/src/components/notebooks/dataset/StatBox.jsx +++ b/DashAI/front/src/components/notebooks/dataset/StatBox.jsx @@ -1,22 +1,30 @@ import React from "react"; import { Paper, Typography } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; -export const StatBox = ({ label, value }) => ( - - - {value} - - - {label} - - -); +export const StatBox = ({ label, value }) => { + const theme = useTheme(); + return ( + + + {value} + + + {label} + + + ); +}; diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/CorrelationsTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/CorrelationsTab.jsx index c45ce91f6..668f13123 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/CorrelationsTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/CorrelationsTab.jsx @@ -1,5 +1,6 @@ import React from "react"; import { Box, Typography, CardContent, Card } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import { BarChart, Bar, @@ -12,6 +13,7 @@ import { } from "recharts"; const CorrelationsTab = ({ correlations }) => { + const theme = useTheme(); const corrData = []; Object.entries(correlations).forEach(([col1, corrs]) => { Object.entries(corrs).forEach(([col2, value]) => { @@ -26,7 +28,7 @@ const CorrelationsTab = ({ correlations }) => { return ( - + Correlation Analysis @@ -39,13 +41,13 @@ const CorrelationsTab = ({ correlations }) => { - + {corrData.map((entry, index) => ( { + const theme = useTheme(); const missingData = Object.entries(nan).map(([col, count]) => ({ column: col, missing: count, @@ -45,7 +47,7 @@ const OverviewTab = ({ {/* Data View */} - + Dataset Preview diff --git a/DashAI/front/src/components/notebooks/datasetCreation/SaveDatasetModal.jsx b/DashAI/front/src/components/notebooks/datasetCreation/SaveDatasetModal.jsx index 1c7a2a030..5f1a27495 100644 --- a/DashAI/front/src/components/notebooks/datasetCreation/SaveDatasetModal.jsx +++ b/DashAI/front/src/components/notebooks/datasetCreation/SaveDatasetModal.jsx @@ -8,6 +8,7 @@ import { Typography, IconButton, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import { Close } from "@mui/icons-material"; import { useSnackbar } from "notistack"; import ConverterHistoryList from "../converter/ConverterHistoryList"; diff --git a/DashAI/front/src/components/notebooks/explorer/ExplorerBox.jsx b/DashAI/front/src/components/notebooks/explorer/ExplorerBox.jsx index 8aee6274b..d4923b34a 100644 --- a/DashAI/front/src/components/notebooks/explorer/ExplorerBox.jsx +++ b/DashAI/front/src/components/notebooks/explorer/ExplorerBox.jsx @@ -9,6 +9,7 @@ import { CircularProgress, Button, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import { Analytics, Info, Delete } from "@mui/icons-material"; import { TabResults } from "./tabs"; import { getExplorerStatus } from "../../../utils/explorerStatus"; @@ -22,6 +23,7 @@ export default function ExplorerBox({ handleExplorerDeleteClick, onStatusChange, }) { + const theme = useTheme(); const [explorerComponent, setExplorerComponent] = useState({}); const [openExplorerDetails, setOpenExplorerDetails] = useState(false); const { loading, data, dataType, setData } = useExplorerResults(explorer); @@ -78,7 +80,11 @@ export default function ExplorerBox({ return ( - + {explorerComponent.display_name} @@ -146,7 +154,7 @@ export default function ExplorerBox({ Step 1: Select Scope - + Select the columns to be used by the explorer. diff --git a/DashAI/front/src/components/pipelines/CustomNode.jsx b/DashAI/front/src/components/pipelines/CustomNode.jsx index 355c77cbc..d49542e0e 100644 --- a/DashAI/front/src/components/pipelines/CustomNode.jsx +++ b/DashAI/front/src/components/pipelines/CustomNode.jsx @@ -27,9 +27,13 @@ const CustomNode = ({ data, isConnectable }) => { const borderColor = data.notConfigured && !isDisabled ? `2px solid ${theme.palette.warning.main}` - : "1px solid #ccc"; - const iconColor = isDisabled ? "#aaa" : "#555"; - const bgColor = isDisabled ? "#f0f0f0" : "#fff"; + : `1px solid ${theme.palette.ui.borderLight}`; + const iconColor = isDisabled + ? theme.palette.text.secondary + : theme.palette.text.primary; + const bgColor = isDisabled + ? theme.palette.ui.panelMedium + : theme.palette.background.paper; const nodeContent = ( { }, }} > - + )} @@ -76,10 +82,10 @@ const CustomNode = ({ data, isConnectable }) => { position={Position.Left} style={{ background: isDisabled - ? "#ccc" + ? theme.palette.ui.border : data.hasError ? theme.palette.error.main - : "#555", + : theme.palette.text.primary, width: 8, height: 8, borderRadius: "50%", @@ -95,7 +101,9 @@ const CustomNode = ({ data, isConnectable }) => { type="source" position={Position.Right} style={{ - background: isDisabled ? "#ccc" : "#555", + background: isDisabled + ? theme.palette.ui.border + : theme.palette.text.primary, width: 8, height: 8, borderRadius: "50%", @@ -114,7 +122,9 @@ const CustomNode = ({ data, isConnectable }) => { alignItems: "center", }} > - + {data.name || data.label} diff --git a/DashAI/front/src/components/pipelines/NodeSidebar.jsx b/DashAI/front/src/components/pipelines/NodeSidebar.jsx index f8069df50..0bc68856a 100644 --- a/DashAI/front/src/components/pipelines/NodeSidebar.jsx +++ b/DashAI/front/src/components/pipelines/NodeSidebar.jsx @@ -1,14 +1,25 @@ import React from "react"; import { Box, Typography } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import HelpOutlineIcon from "@mui/icons-material/HelpOutline"; import { getNodeHelp } from "./nodeHelp"; function NodeSidebar({ availableNodes, onDragStart, nodeHelp }) { + const theme = useTheme(); return ( - + Nodes {availableNodes.map((node) => ( @@ -19,8 +30,8 @@ function NodeSidebar({ availableNodes, onDragStart, nodeHelp }) { sx={{ mb: 1, p: 1, - backgroundColor: "#333", - color: "#fff", + backgroundColor: theme.palette.ui.border, + color: theme.palette.text.primary, borderRadius: 1, textAlign: "center", cursor: "grab", @@ -33,8 +44,8 @@ function NodeSidebar({ availableNodes, onDragStart, nodeHelp }) { @@ -44,7 +55,11 @@ function NodeSidebar({ availableNodes, onDragStart, nodeHelp }) { <> {help.name || nodeHelp?.type || "Pipeline Help"} @@ -55,7 +70,7 @@ function NodeSidebar({ availableNodes, onDragStart, nodeHelp }) { {paragraph} @@ -63,17 +78,26 @@ function NodeSidebar({ availableNodes, onDragStart, nodeHelp }) { )} {help.input && ( - + Inputs: {help.input || "None"} )} {help.output && ( - + Outputs: {help.output || "None"} )} {help.next && ( - + Can be followed by: {help.next || "None"} )} diff --git a/DashAI/front/src/components/predictions/ManualInputForm.jsx b/DashAI/front/src/components/predictions/ManualInputForm.jsx index 324eb1c84..b818f592b 100644 --- a/DashAI/front/src/components/predictions/ManualInputForm.jsx +++ b/DashAI/front/src/components/predictions/ManualInputForm.jsx @@ -12,6 +12,7 @@ import { Paper, IconButton, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import { AddCircleOutline, DeleteOutline } from "@mui/icons-material"; import { renderInputField } from "./renderInputField"; @@ -23,6 +24,7 @@ export default function ManualInputForm({ manualInputData, setManualInputData, }) { + const theme = useTheme(); const [rows, setRows] = useState(createInitialRows()); function createInitialRows() { @@ -92,7 +94,11 @@ export default function ManualInputForm({ Manual Input - + Enter data manually for prediction. Fill in the fields below and submit when ready. diff --git a/DashAI/front/src/components/predictions/ModeSelector.jsx b/DashAI/front/src/components/predictions/ModeSelector.jsx index a0cb7c258..bdcfdfa7d 100644 --- a/DashAI/front/src/components/predictions/ModeSelector.jsx +++ b/DashAI/front/src/components/predictions/ModeSelector.jsx @@ -1,15 +1,21 @@ import { useState } from "react"; import { Box, Card, CardContent, Typography, Paper } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import StorageIcon from "@mui/icons-material/Storage"; import CreateIcon from "@mui/icons-material/Create"; function ModeSelector({ predictionMode, setPredictionMode }) { + const theme = useTheme(); + return ( Select Prediction Mode - + Choose how you would like to provide input data for the prediction. @@ -40,7 +46,10 @@ function ModeSelector({ predictionMode, setPredictionMode }) { Use Existing Dataset - + Select a dataset from the platform @@ -73,7 +82,10 @@ function ModeSelector({ predictionMode, setPredictionMode }) { Manual Prediction - + Enter values manually diff --git a/DashAI/front/src/components/predictions/PredictionsTable.jsx b/DashAI/front/src/components/predictions/PredictionsTable.jsx index 96e5315ac..f55e3f3dd 100644 --- a/DashAI/front/src/components/predictions/PredictionsTable.jsx +++ b/DashAI/front/src/components/predictions/PredictionsTable.jsx @@ -7,12 +7,14 @@ import { Tooltip, IconButton, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import { DataGrid } from "@mui/x-data-grid"; import { formatDate, getColorByStatus } from "../../utils"; import { getPredictionStatus } from "../../utils/predictionStatus"; import { Delete } from "@mui/icons-material"; function PredictionsTable({ predictions, onItemClick, onItemDelete }) { + const theme = useTheme(); const StyledCell = styled("div")(({ theme, color }) => ({ display: "inline-block", padding: theme.spacing(0.5), @@ -63,7 +65,7 @@ function PredictionsTable({ predictions, onItemClick, onItemDelete }) { { const statusText = getPredictionStatus(params?.row?.status); return ( - + {statusText} ); @@ -145,8 +147,13 @@ function PredictionsTable({ predictions, onItemClick, onItemDelete }) { if (!predictions || predictions.length === 0) { return ( - No predictions yet - + + No predictions yet + + Run your first prediction to see it here @@ -163,7 +170,10 @@ function PredictionsTable({ predictions, onItemClick, onItemDelete }) { Predictions - + Click on a prediction to view details or delete it using the delete icon. diff --git a/DashAI/front/src/components/predictions/ResultsTable.jsx b/DashAI/front/src/components/predictions/ResultsTable.jsx index 07c0a6b16..8e30a1992 100644 --- a/DashAI/front/src/components/predictions/ResultsTable.jsx +++ b/DashAI/front/src/components/predictions/ResultsTable.jsx @@ -11,6 +11,7 @@ import { Paper, CircularProgress, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import { getPredictionStatus } from "../../utils/predictionStatus"; import DatasetTable from "../notebooks/dataset/DatasetTable"; import { getDatasetFile } from "../../api/datasets"; @@ -18,6 +19,7 @@ import { getDatasetFile } from "../../api/datasets"; const RUNNING_STATUSES = ["Delivered", "Started"]; function ResultsTable({ selectedPrediction }) { + const theme = useTheme(); const [loadingExecution, setLoadingExecution] = useState( RUNNING_STATUSES.includes(getPredictionStatus(selectedPrediction?.status)), ); @@ -51,8 +53,7 @@ function ResultsTable({ selectedPrediction }) { {loadingExecution ? "The prediction is still running. Results will be available once it is finished." @@ -65,7 +66,7 @@ function ResultsTable({ selectedPrediction }) { sx={{ py: 4, textAlign: "center", - color: "text.secondary", + color: theme.palette.text.secondary, }} > @@ -79,7 +80,10 @@ function ResultsTable({ selectedPrediction }) { selectedPrediction && getPredictionStatus(selectedPrediction?.status) === "Finished" && ( <> - + {selectedPrediction.dataset ? `Based on dataset: ${selectedPrediction.dataset.name}` : "Manually provided input data."} diff --git a/DashAI/front/src/components/shared/FormSchemaBreadScrumbs.jsx b/DashAI/front/src/components/shared/FormSchemaBreadScrumbs.jsx index 74275d99f..4b3c43a80 100644 --- a/DashAI/front/src/components/shared/FormSchemaBreadScrumbs.jsx +++ b/DashAI/front/src/components/shared/FormSchemaBreadScrumbs.jsx @@ -2,6 +2,7 @@ import React from "react"; import Breadcrumbs from "@mui/material/Breadcrumbs"; import Typography from "@mui/material/Typography"; import Link from "@mui/material/Link"; +import { useTheme } from "@mui/material/styles"; import { useFormSchemaStore } from "../../contexts/schema"; /** @@ -9,6 +10,7 @@ import { useFormSchemaStore } from "../../contexts/schema"; */ function FormSchemaBreadScrumbs() { + const theme = useTheme(); const { properties, removeLastProperty } = useFormSchemaStore(); const handleRemoveLastProperty = (index) => { @@ -32,7 +34,7 @@ function FormSchemaBreadScrumbs() { return ( {linkedProperties} - + {properties[properties.length - 1]?.label} diff --git a/DashAI/front/src/components/threeSectionLayout/BarHeader.jsx b/DashAI/front/src/components/threeSectionLayout/BarHeader.jsx index e146d28ab..1eb6c72d9 100644 --- a/DashAI/front/src/components/threeSectionLayout/BarHeader.jsx +++ b/DashAI/front/src/components/threeSectionLayout/BarHeader.jsx @@ -1,6 +1,8 @@ import { Box, Typography } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; export default function BarHeader() { + const theme = useTheme(); return ( Dash diff --git a/DashAI/front/src/components/threeSectionLayout/CollapsibleList.jsx b/DashAI/front/src/components/threeSectionLayout/CollapsibleList.jsx index 8d8d88e8d..5dc6d042b 100644 --- a/DashAI/front/src/components/threeSectionLayout/CollapsibleList.jsx +++ b/DashAI/front/src/components/threeSectionLayout/CollapsibleList.jsx @@ -1,5 +1,6 @@ import { useState } from "react"; import { Box, Typography, Collapse } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import FolderIcon from "@mui/icons-material/Folder"; import KeyboardArrowRightIcon from "@mui/icons-material/KeyboardArrowRight"; import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown"; @@ -17,6 +18,7 @@ export default function CollapsibleList({ Icon = FolderIcon, getItemDescription, }) { + const theme = useTheme(); const [open, setOpen] = useState(defaultOpen); const count = items?.length ?? 0; @@ -46,11 +48,11 @@ export default function CollapsibleList({ py: 0.5, px: 1, borderRadius: 1, - "&:hover": { bgcolor: "rgba(255, 255, 255, 0.05)" }, + "&:hover": { bgcolor: theme.palette.ui.hover }, }} onClick={() => setOpen((v) => !v)} > - + {title} @@ -69,8 +72,8 @@ export default function CollapsibleList({ {open ? ( - + ) : ( - + )} @@ -97,10 +104,12 @@ export default function CollapsibleList({ sx={{ "&::-webkit-scrollbar": { width: "6px" }, "&::-webkit-scrollbar-thumb": { - backgroundColor: "#374151", + backgroundColor: theme.palette.ui.scrollbar, borderRadius: "3px", }, - "&::-webkit-scrollbar-thumb:hover": { backgroundColor: "#4B5563" }, + "&::-webkit-scrollbar-thumb:hover": { + backgroundColor: theme.palette.ui.scrollbarHover, + }, overflowY: "auto", }} > @@ -125,7 +134,12 @@ export default function CollapsibleList({ )) ) : ( No items found diff --git a/DashAI/front/src/components/threeSectionLayout/GroupedCollapsibleList.jsx b/DashAI/front/src/components/threeSectionLayout/GroupedCollapsibleList.jsx index 32b5dc2cc..e62ee88c5 100644 --- a/DashAI/front/src/components/threeSectionLayout/GroupedCollapsibleList.jsx +++ b/DashAI/front/src/components/threeSectionLayout/GroupedCollapsibleList.jsx @@ -1,5 +1,6 @@ import { useState } from "react"; import { Box, Typography, Collapse } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import KeyboardArrowRightIcon from "@mui/icons-material/KeyboardArrowRight"; import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown"; import ItemBox from "./ItemBox"; @@ -16,6 +17,7 @@ export default function GroupedCollapsibleList({ getItemDescription, initialOpenGroups = {}, }) { + const theme = useTheme(); const [openGroups, setOpenGroups] = useState(initialOpenGroups); const toggleGroup = (groupName) => { @@ -57,16 +59,20 @@ export default function GroupedCollapsibleList({ top: 0, zIndex: 10, borderRadius: 1, - "&:hover": { bgcolor: "rgba(255, 255, 255, 0.05)" }, + "&:hover": { bgcolor: theme.palette.ui.hover }, }} > - {Icon && } - {title} + {Icon && ( + + )} + {title} @@ -106,18 +114,18 @@ export default function GroupedCollapsibleList({ px: 1, borderRadius: 1, "&:hover": { - bgcolor: "rgba(255, 255, 255, 0.05)", + bgcolor: theme.palette.ui.hover, }, }} onClick={() => toggleGroup(groupName)} > {openGroups[groupName] ? ( ) : ( )} {groupName} ) : ( - + {editedName} )} - + {description ? description : ""} diff --git a/DashAI/front/src/components/threeSectionLayout/ItemMenu.jsx b/DashAI/front/src/components/threeSectionLayout/ItemMenu.jsx index 43323988e..3e3348c5d 100644 --- a/DashAI/front/src/components/threeSectionLayout/ItemMenu.jsx +++ b/DashAI/front/src/components/threeSectionLayout/ItemMenu.jsx @@ -9,6 +9,7 @@ import { styled, Box, } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import MoreHorizIcon from "@mui/icons-material/MoreHoriz"; import DeleteIcon from "@mui/icons-material/Delete"; import InfoIcon from "@mui/icons-material/Info"; @@ -23,6 +24,7 @@ const DeleteMenuItem = styled(MenuItem)(({ theme }) => ({ })); export default function ItemMenu({ itemId, onInfo, onDelete, onEdit }) { + const theme = useTheme(); const [anchorEl, setAnchorEl] = useState(null); const [deleteModalOpen, setDeleteModalOpen] = useState(false); const open = Boolean(anchorEl); @@ -61,7 +63,7 @@ export default function ItemMenu({ itemId, onInfo, onDelete, onEdit }) { aria-expanded={open ? "true" : undefined} onClick={handleClick} size="small" - sx={{ color: "text.secondary" }} + sx={{ color: theme.palette.text.secondary }} > diff --git a/DashAI/front/src/components/threeSectionLayout/SearchBar.jsx b/DashAI/front/src/components/threeSectionLayout/SearchBar.jsx index 26800ccc0..f97c9a102 100644 --- a/DashAI/front/src/components/threeSectionLayout/SearchBar.jsx +++ b/DashAI/front/src/components/threeSectionLayout/SearchBar.jsx @@ -1,7 +1,10 @@ import { TextField, InputAdornment } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import SearchIcon from "@mui/icons-material/Search"; export default function SearchBar({ placeholder, onChange, value }) { + const theme = useTheme(); + return ( - + ), }, diff --git a/DashAI/front/src/pages/home/Home.jsx b/DashAI/front/src/pages/home/Home.jsx index 7ac97ea2c..d2c7c47cf 100644 --- a/DashAI/front/src/pages/home/Home.jsx +++ b/DashAI/front/src/pages/home/Home.jsx @@ -20,10 +20,15 @@ function Home() { {/* Title */} - + Welcome to DashAI! - + Getting started - + Advanced @@ -14,7 +17,10 @@ export default function MetricsCard({ title, metrics }) { key={key} sx={{ display: "flex", justifyContent: "space-between", mb: 1 }} > - + {key}: @@ -23,7 +29,10 @@ export default function MetricsCard({ title, metrics }) { )) ) : ( - + No metrics available )} diff --git a/DashAI/front/src/pages/results/components/ResultsDialogViews.jsx b/DashAI/front/src/pages/results/components/ResultsDialogViews.jsx index e1ec16381..feecd2e6c 100644 --- a/DashAI/front/src/pages/results/components/ResultsDialogViews.jsx +++ b/DashAI/front/src/pages/results/components/ResultsDialogViews.jsx @@ -1,10 +1,12 @@ import React from "react"; import PropTypes from "prop-types"; import { Grid, Button, Typography } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; import TimestampWrapper from "../../../components/shared/TimestampWrapper"; import { TIMESTAMP_KEYS } from "../../../constants/timestamp"; function ResultsDialogViews({ showTable, handleShowTable, handleShowGraphs }) { + const theme = useTheme(); return ( @@ -22,8 +24,10 @@ function ResultsDialogViews({ showTable, handleShowTable, handleShowGraphs }) { color={showTable ? "primary" : "inherit"} onClick={handleShowTable} style={{ - border: showTable ? "2px solid #00bebb" : "2px solid #00bebb", - color: showTable ? "#ffffff" : "#00bebb", + border: `2px solid ${theme.palette.primary.main}`, + color: showTable + ? theme.palette.text.primary + : theme.palette.primary.main, borderRadius: "1px", }} > @@ -36,8 +40,10 @@ function ResultsDialogViews({ showTable, handleShowTable, handleShowGraphs }) { color={!showTable ? "primary" : "inherit"} onClick={handleShowGraphs} style={{ - border: !showTable ? "2px solid #00bebb" : "2px solid #00bebb", - color: !showTable ? "#ffffff" : "#00bebb", + border: `2px solid ${theme.palette.primary.main}`, + color: !showTable + ? theme.palette.text.primary + : theme.palette.primary.main, borderRadius: "1px", }} > diff --git a/DashAI/front/src/pages/results/components/ResultsGraphsSelection.jsx b/DashAI/front/src/pages/results/components/ResultsGraphsSelection.jsx index 332da0bfb..edbaf267f 100644 --- a/DashAI/front/src/pages/results/components/ResultsGraphsSelection.jsx +++ b/DashAI/front/src/pages/results/components/ResultsGraphsSelection.jsx @@ -1,8 +1,10 @@ import React from "react"; import PropTypes from "prop-types"; import { Box, Button } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; function ResultsGraphsSelection({ selectedChart, handleChangeChart }) { + const theme = useTheme(); return (