From 9e609eefabb4524a7186540e3329b54157f77cff Mon Sep 17 00:00:00 2001 From: Irozuku Date: Tue, 19 May 2026 11:55:02 -0400 Subject: [PATCH 1/6] perf: drop heatmap text annotations for large correlation matrices --- .../dataset/tabs/CorrelationsTab.jsx | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/CorrelationsTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/CorrelationsTab.jsx index 4ffdc90d0..cc9d9c4a6 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/CorrelationsTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/CorrelationsTab.jsx @@ -10,7 +10,7 @@ const CorrelationsTab = ({ correlations }) => { const theme = useTheme(); const { columns, zValues, strongCorrelations, leftMargin } = useMemo(() => { - const cols = Object.keys(correlations); + const cols = Object.keys(correlations ?? {}); // Build symmetric matrix const z = cols.map((col1) => @@ -67,12 +67,18 @@ const CorrelationsTab = ({ correlations }) => { ], zmin: -1, zmax: 1, - text: zValues.map((row) => row.map((val) => val.toFixed(3))), - texttemplate: "%{text}", - textfont: { - color: theme.palette.text.primary, - size: 11, - }, + ...(columns.length <= 30 + ? { + text: zValues.map((row) => + row.map((val) => val.toFixed(3)), + ), + texttemplate: "%{text}", + textfont: { + color: theme.palette.text.primary, + size: 11, + }, + } + : {}), hovertemplate: "%{x} — %{y}
r = %{z:.3f}", showscale: true, colorbar: { From ca7267b666f4d98fa03253d77e5db040e4f3ec86 Mon Sep 17 00:00:00 2001 From: Irozuku Date: Tue, 19 May 2026 15:27:30 -0400 Subject: [PATCH 2/6] perf: batch-render column cards with Load More button in analysis tabs Show first 10 columns on mount to avoid initializing 70+ chart instances at once. A "Show more" button appends the next 10. Applies to NumericTab, CategoricalTab, and TextTab. --- .../notebooks/dataset/tabs/CategoricalTab.jsx | 20 +++++++++++++++-- .../notebooks/dataset/tabs/NumericTab.jsx | 22 ++++++++++++++++--- .../notebooks/dataset/tabs/TextTab.jsx | 20 ++++++++++++++++- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/CategoricalTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/CategoricalTab.jsx index f6594ac7c..f0f14006c 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/CategoricalTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/CategoricalTab.jsx @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { Box, Typography, CardContent } from "@mui/material"; +import { Box, Typography, CardContent, Button } from "@mui/material"; import { useTheme } from "@mui/material/styles"; import TitleIcon from "@mui/icons-material/Title"; import { @@ -18,14 +18,20 @@ import { StatBox } from "../StatBox"; import ExportableCard from "../ExportableCard"; import { useTranslation } from "react-i18next"; +const BATCH_SIZE = 10; + export const CategoricalTab = ({ categoricalStats }) => { const { t } = useTranslation(["datasets", "common"]); const theme = useTheme(); const [activeIndices, setActiveIndices] = useState({}); + const entries = Object.entries(categoricalStats ?? {}); + const [visibleCount, setVisibleCount] = useState(BATCH_SIZE); + const visibleEntries = entries.slice(0, visibleCount); + const remaining = entries.length - visibleCount; return ( - {Object.entries(categoricalStats).map(([column, stats]) => ( + {visibleEntries.map(([column, stats]) => ( { ))} + {remaining > 0 && ( + + + + )} ); }; diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx index db96c69b2..54d521c91 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx @@ -1,5 +1,5 @@ -import React from "react"; -import { Box, Typography, CardContent, Alert } from "@mui/material"; +import React, { useState } from "react"; +import { Box, Typography, CardContent, Alert, Button } from "@mui/material"; import { useTheme } from "@mui/material/styles"; import TrendingUpIcon from "@mui/icons-material/TrendingUp"; import InfoIcon from "@mui/icons-material/Info"; @@ -9,9 +9,15 @@ import { MetricRow } from "../MetricRow"; import ExportableCard from "../ExportableCard"; import { Trans, useTranslation } from "react-i18next"; +const BATCH_SIZE = 10; + export const NumericTab = ({ numericStats }) => { const { t } = useTranslation(["datasets"]); const theme = useTheme(); + const entries = Object.entries(numericStats ?? {}); + const [visibleCount, setVisibleCount] = useState(BATCH_SIZE); + const visibleEntries = entries.slice(0, visibleCount); + const remaining = entries.length - visibleCount; const toNumberOrNull = (value) => { if ( @@ -33,7 +39,7 @@ export const NumericTab = ({ numericStats }) => { return ( - {Object.entries(numericStats ?? {}).map(([column, stats]) => ( + {visibleEntries.map(([column, stats]) => ( { ))} + {remaining > 0 && ( + + + + )} ); }; diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx index 742ba6215..cab48089d 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx @@ -6,6 +6,7 @@ import { Chip, Alert, Tooltip, + Button, } from "@mui/material"; import { useTheme } from "@mui/material/styles"; import TextFieldsIcon from "@mui/icons-material/TextFields"; @@ -24,13 +25,20 @@ import { MetricRow } from "../MetricRow"; import ExportableCard from "../ExportableCard"; import { useTranslation } from "react-i18next"; +const BATCH_SIZE = 10; + export const TextTab = ({ textStats }) => { const theme = useTheme(); const { t } = useTranslation(["datasets", "common"]); const [activeIndices, setActiveIndices] = useState({}); + const entries = Object.entries(textStats ?? {}); + const [visibleCount, setVisibleCount] = useState(BATCH_SIZE); + const visibleEntries = entries.slice(0, visibleCount); + const remaining = entries.length - visibleCount; + return ( - {Object.entries(textStats).map(([column, stats]) => { + {visibleEntries.map(([column, stats]) => { const lengthData = [ { label: t("datasets:label.min"), @@ -249,6 +257,16 @@ export const TextTab = ({ textStats }) => { ); })} + {remaining > 0 && ( + + + + )} ); }; From 845bd8ef6f2970e6dca8f1f4cb5846c50d42610b Mon Sep 17 00:00:00 2001 From: Irozuku Date: Tue, 19 May 2026 15:34:16 -0400 Subject: [PATCH 3/6] fix: expand batch and scroll-to card when clicking insight from sidebar Insight clicks now store the target column in context. NumericTab and TextTab expand their visible batch to include the column if it hasn't been loaded yet, then scroll to and highlight the card. --- .../src/components/DatasetVisualization.jsx | 20 +++++++++- .../contexts/DatasetsAndNotebooksContext.jsx | 3 ++ .../notebooks/dataset/ColumnInsights.jsx | 19 ++-------- .../notebooks/dataset/tabs/NumericTab.jsx | 37 ++++++++++++++++++- .../notebooks/dataset/tabs/TextTab.jsx | 28 +++++++++++++- 5 files changed, 85 insertions(+), 22 deletions(-) diff --git a/DashAI/front/src/components/DatasetVisualization.jsx b/DashAI/front/src/components/DatasetVisualization.jsx index 8d9c967c6..a24687de9 100644 --- a/DashAI/front/src/components/DatasetVisualization.jsx +++ b/DashAI/front/src/components/DatasetVisualization.jsx @@ -60,6 +60,12 @@ export default function DatasetVisualization({ datasetsContext?.setDatasetTab ?? modelsContext?.setDatasetTab ?? (() => {}); + const scrollToColumn = + datasetsContext?.scrollToColumn ?? modelsContext?.scrollToColumn ?? null; + const setScrollToColumn = + datasetsContext?.setScrollToColumn ?? + modelsContext?.setScrollToColumn ?? + (() => {}); const [datasetInfo, setDatasetInfo] = useState(null); const [columnTypes, setColumnTypes] = useState({}); @@ -436,14 +442,24 @@ export default function DatasetVisualization({ /> )} {tab === 1 && ( - + )} {tab === 2 && ( )} - {tab === 3 && } + {tab === 3 && ( + + )} {tab === 4 && ( { const [uploadDataloader, setUploadDataloader] = useState(null); const [datasetInfo, setDatasetInfo] = useState(null); const [datasetTab, setDatasetTab] = useState(0); + const [scrollToColumn, setScrollToColumn] = useState(null); useEffect(() => { fetchNotebooks(); @@ -88,6 +89,8 @@ export const DatasetsAndNotebooksProvider = ({ children }) => { setDatasetInfo, datasetTab, setDatasetTab, + scrollToColumn, + setScrollToColumn, uploadDataloader, setUploadDataloader, }; diff --git a/DashAI/front/src/components/notebooks/dataset/ColumnInsights.jsx b/DashAI/front/src/components/notebooks/dataset/ColumnInsights.jsx index 48c93c5ac..ade1f67cb 100644 --- a/DashAI/front/src/components/notebooks/dataset/ColumnInsights.jsx +++ b/DashAI/front/src/components/notebooks/dataset/ColumnInsights.jsx @@ -23,6 +23,7 @@ export default function ColumnInsights({ const { t } = useTranslation(["datasets"]); const context = useDatasetsAndNotebooks(); const setDatasetTab = onNavigateTab ?? context?.setDatasetTab ?? (() => {}); + const setScrollToColumn = context?.setScrollToColumn ?? (() => {}); const insights = useMemo(() => { const items = []; @@ -79,23 +80,9 @@ export default function ColumnInsights({ const handleClick = useCallback( (insight) => { setDatasetTab(insight.tab); - // Wait for the tab content to render, then scroll to the card - setTimeout(() => { - const card = document.querySelector( - `[data-column-card="${insight.column}"]`, - ); - if (card) { - card.scrollIntoView({ behavior: "smooth", block: "center" }); - // Brief highlight effect - card.style.transition = "box-shadow 0.3s"; - card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; - setTimeout(() => { - card.style.boxShadow = ""; - }, 2000); - } - }, 100); + setScrollToColumn(insight.column); }, - [setDatasetTab, theme], + [setDatasetTab, setScrollToColumn], ); const colorMap = { diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx index 54d521c91..6cc1d9fbb 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState, useRef, useLayoutEffect, useEffect } from "react"; import { Box, Typography, CardContent, Alert, Button } from "@mui/material"; import { useTheme } from "@mui/material/styles"; import TrendingUpIcon from "@mui/icons-material/TrendingUp"; @@ -11,13 +11,46 @@ import { Trans, useTranslation } from "react-i18next"; const BATCH_SIZE = 10; -export const NumericTab = ({ numericStats }) => { +export const NumericTab = ({ + numericStats, + scrollToColumn, + setScrollToColumn, +}) => { const { t } = useTranslation(["datasets"]); const theme = useTheme(); const entries = Object.entries(numericStats ?? {}); const [visibleCount, setVisibleCount] = useState(BATCH_SIZE); const visibleEntries = entries.slice(0, visibleCount); const remaining = entries.length - visibleCount; + const pendingScrollRef = useRef(null); + + useEffect(() => { + if (!scrollToColumn) return; + const idx = entries.findIndex(([col]) => col === scrollToColumn); + if (idx === -1) return; + if (idx < visibleCount) { + pendingScrollRef.current = scrollToColumn; + setScrollToColumn(null); + } else { + pendingScrollRef.current = scrollToColumn; + setVisibleCount(idx + 1); + setScrollToColumn(null); + } + }, [scrollToColumn]); + + useLayoutEffect(() => { + if (!pendingScrollRef.current) return; + const col = pendingScrollRef.current; + pendingScrollRef.current = null; + const card = document.querySelector(`[data-column-card="${col}"]`); + if (!card) return; + card.scrollIntoView({ behavior: "smooth", block: "center" }); + card.style.transition = "box-shadow 0.3s"; + card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; + setTimeout(() => { + card.style.boxShadow = ""; + }, 2000); + }, [visibleCount, scrollToColumn]); const toNumberOrNull = (value) => { if ( diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx index cab48089d..69d55f485 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState, useRef, useLayoutEffect, useEffect } from "react"; import { Box, Typography, @@ -27,7 +27,7 @@ import { useTranslation } from "react-i18next"; const BATCH_SIZE = 10; -export const TextTab = ({ textStats }) => { +export const TextTab = ({ textStats, scrollToColumn, setScrollToColumn }) => { const theme = useTheme(); const { t } = useTranslation(["datasets", "common"]); const [activeIndices, setActiveIndices] = useState({}); @@ -35,6 +35,30 @@ export const TextTab = ({ textStats }) => { const [visibleCount, setVisibleCount] = useState(BATCH_SIZE); const visibleEntries = entries.slice(0, visibleCount); const remaining = entries.length - visibleCount; + const pendingScrollRef = useRef(null); + + useEffect(() => { + if (!scrollToColumn) return; + const idx = entries.findIndex(([col]) => col === scrollToColumn); + if (idx === -1) return; + pendingScrollRef.current = scrollToColumn; + if (idx >= visibleCount) setVisibleCount(idx + 1); + setScrollToColumn(null); + }, [scrollToColumn]); + + useLayoutEffect(() => { + if (!pendingScrollRef.current) return; + const col = pendingScrollRef.current; + pendingScrollRef.current = null; + const card = document.querySelector(`[data-column-card="${col}"]`); + if (!card) return; + card.scrollIntoView({ behavior: "smooth", block: "center" }); + card.style.transition = "box-shadow 0.3s"; + card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; + setTimeout(() => { + card.style.boxShadow = ""; + }, 2000); + }, [visibleCount, scrollToColumn]); return ( From 5eda86f94a1826e3f7255c7ce5d0a8e759cecba2 Mon Sep 17 00:00:00 2001 From: Irozuku Date: Tue, 19 May 2026 15:40:33 -0400 Subject: [PATCH 4/6] perf: replace useEffect+useLayoutEffect pair with single useLayoutEffect for instant column highlight --- .../notebooks/dataset/tabs/NumericTab.jsx | 54 +++++++++++-------- .../notebooks/dataset/tabs/TextTab.jsx | 53 +++++++++++------- 2 files changed, 64 insertions(+), 43 deletions(-) diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx index 6cc1d9fbb..582ba6289 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/NumericTab.jsx @@ -1,4 +1,4 @@ -import React, { useState, useRef, useLayoutEffect, useEffect } from "react"; +import React, { useState, useRef, useLayoutEffect } from "react"; import { Box, Typography, CardContent, Alert, Button } from "@mui/material"; import { useTheme } from "@mui/material/styles"; import TrendingUpIcon from "@mui/icons-material/TrendingUp"; @@ -24,33 +24,41 @@ export const NumericTab = ({ const remaining = entries.length - visibleCount; const pendingScrollRef = useRef(null); - useEffect(() => { - if (!scrollToColumn) return; + useLayoutEffect(() => { + if (!scrollToColumn) { + if (!pendingScrollRef.current) return; + const col = pendingScrollRef.current; + const card = document.querySelector(`[data-column-card="${col}"]`); + if (!card) return; + pendingScrollRef.current = null; + card.scrollIntoView({ behavior: "smooth", block: "center" }); + card.style.transition = "box-shadow 0.3s"; + card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; + setTimeout(() => { + card.style.boxShadow = ""; + }, 2000); + return; + } const idx = entries.findIndex(([col]) => col === scrollToColumn); if (idx === -1) return; - if (idx < visibleCount) { - pendingScrollRef.current = scrollToColumn; - setScrollToColumn(null); - } else { + if (idx >= visibleCount) { pendingScrollRef.current = scrollToColumn; setVisibleCount(idx + 1); - setScrollToColumn(null); + } else { + const card = document.querySelector( + `[data-column-card="${scrollToColumn}"]`, + ); + if (card) { + card.scrollIntoView({ behavior: "smooth", block: "center" }); + card.style.transition = "box-shadow 0.3s"; + card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; + setTimeout(() => { + card.style.boxShadow = ""; + }, 2000); + } } - }, [scrollToColumn]); - - useLayoutEffect(() => { - if (!pendingScrollRef.current) return; - const col = pendingScrollRef.current; - pendingScrollRef.current = null; - const card = document.querySelector(`[data-column-card="${col}"]`); - if (!card) return; - card.scrollIntoView({ behavior: "smooth", block: "center" }); - card.style.transition = "box-shadow 0.3s"; - card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; - setTimeout(() => { - card.style.boxShadow = ""; - }, 2000); - }, [visibleCount, scrollToColumn]); + setScrollToColumn(null); + }, [scrollToColumn, visibleCount]); const toNumberOrNull = (value) => { if ( diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx index 69d55f485..1c883bca4 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx @@ -1,4 +1,4 @@ -import React, { useState, useRef, useLayoutEffect, useEffect } from "react"; +import React, { useState, useRef, useLayoutEffect } from "react"; import { Box, Typography, @@ -37,28 +37,41 @@ export const TextTab = ({ textStats, scrollToColumn, setScrollToColumn }) => { const remaining = entries.length - visibleCount; const pendingScrollRef = useRef(null); - useEffect(() => { - if (!scrollToColumn) return; + useLayoutEffect(() => { + if (!scrollToColumn) { + if (!pendingScrollRef.current) return; + const col = pendingScrollRef.current; + const card = document.querySelector(`[data-column-card="${col}"]`); + if (!card) return; + pendingScrollRef.current = null; + card.scrollIntoView({ behavior: "smooth", block: "center" }); + card.style.transition = "box-shadow 0.3s"; + card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; + setTimeout(() => { + card.style.boxShadow = ""; + }, 2000); + return; + } const idx = entries.findIndex(([col]) => col === scrollToColumn); if (idx === -1) return; - pendingScrollRef.current = scrollToColumn; - if (idx >= visibleCount) setVisibleCount(idx + 1); + if (idx >= visibleCount) { + pendingScrollRef.current = scrollToColumn; + setVisibleCount(idx + 1); + } else { + const card = document.querySelector( + `[data-column-card="${scrollToColumn}"]`, + ); + if (card) { + card.scrollIntoView({ behavior: "smooth", block: "center" }); + card.style.transition = "box-shadow 0.3s"; + card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; + setTimeout(() => { + card.style.boxShadow = ""; + }, 2000); + } + } setScrollToColumn(null); - }, [scrollToColumn]); - - useLayoutEffect(() => { - if (!pendingScrollRef.current) return; - const col = pendingScrollRef.current; - pendingScrollRef.current = null; - const card = document.querySelector(`[data-column-card="${col}"]`); - if (!card) return; - card.scrollIntoView({ behavior: "smooth", block: "center" }); - card.style.transition = "box-shadow 0.3s"; - card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; - setTimeout(() => { - card.style.boxShadow = ""; - }, 2000); - }, [visibleCount, scrollToColumn]); + }, [scrollToColumn, visibleCount]); return ( From fab797bf2aa005350feb1543c28aa6dd6a9849a6 Mon Sep 17 00:00:00 2001 From: Irozuku Date: Tue, 19 May 2026 15:43:58 -0400 Subject: [PATCH 5/6] perf: skip React state for already-visible column cards in ColumnInsights --- .../notebooks/dataset/ColumnInsights.jsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/DashAI/front/src/components/notebooks/dataset/ColumnInsights.jsx b/DashAI/front/src/components/notebooks/dataset/ColumnInsights.jsx index ade1f67cb..c5b3d5c4e 100644 --- a/DashAI/front/src/components/notebooks/dataset/ColumnInsights.jsx +++ b/DashAI/front/src/components/notebooks/dataset/ColumnInsights.jsx @@ -79,10 +79,23 @@ export default function ColumnInsights({ const handleClick = useCallback( (insight) => { - setDatasetTab(insight.tab); - setScrollToColumn(insight.column); + const card = document.querySelector( + `[data-column-card="${insight.column}"]`, + ); + if (card) { + setDatasetTab(insight.tab); + card.scrollIntoView({ behavior: "smooth", block: "center" }); + card.style.transition = "box-shadow 0.3s"; + card.style.boxShadow = `0 0 0 2px ${theme.palette.warning.main}`; + setTimeout(() => { + card.style.boxShadow = ""; + }, 2000); + } else { + setDatasetTab(insight.tab); + setScrollToColumn(insight.column); + } }, - [setDatasetTab, setScrollToColumn], + [setDatasetTab, setScrollToColumn, theme], ); const colorMap = { From 28280ec46a4d1921dc817bf062d092c897e29209 Mon Sep 17 00:00:00 2001 From: Irozuku Date: Fri, 29 May 2026 11:09:55 -0400 Subject: [PATCH 6/6] fix: correct indentation in CategoricalTab and TextTab components with pre-commit --- .../components/notebooks/dataset/tabs/CategoricalTab.jsx | 4 ++-- .../src/components/notebooks/dataset/tabs/TextTab.jsx | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/CategoricalTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/CategoricalTab.jsx index 4b1354ee2..dd0036c3e 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/CategoricalTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/CategoricalTab.jsx @@ -129,8 +129,8 @@ export const CategoricalTab = ({ categoricalStats }) => { index === activeIndex ? 1 : activeIndex !== null - ? 0.5 - : 0.7 + ? 0.5 + : 0.7 } /> ); diff --git a/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx b/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx index 802264828..7919ea577 100644 --- a/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx +++ b/DashAI/front/src/components/notebooks/dataset/tabs/TextTab.jsx @@ -132,8 +132,8 @@ export const TextTab = ({ textStats, scrollToColumn, setScrollToColumn }) => { uniquePercentage > 90 ? theme.palette.success.main : uniquePercentage > 30 - ? theme.palette.warning.main - : theme.palette.error.main, + ? theme.palette.warning.main + : theme.palette.error.main, color: "white", cursor: "default", }} @@ -279,8 +279,8 @@ export const TextTab = ({ textStats, scrollToColumn, setScrollToColumn }) => { index === activeIndex ? 1 : activeIndex !== null - ? 0.5 - : 0.7 + ? 0.5 + : 0.7 } /> );