From 3717d7d4581dae59db1da4a258cd37f715127b1a Mon Sep 17 00:00:00 2001 From: amhsirak Date: Tue, 4 Nov 2025 21:18:18 +0530 Subject: [PATCH 01/29] fix: switch to active action data tab on capture --- src/components/run/InterpretationLog.tsx | 41 ++++++++++++++++-------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/components/run/InterpretationLog.tsx b/src/components/run/InterpretationLog.tsx index 74c46f4e..05677724 100644 --- a/src/components/run/InterpretationLog.tsx +++ b/src/components/run/InterpretationLog.tsx @@ -354,6 +354,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se useEffect(() => { let shouldOpenDrawer = false; + let switchToListTab = false; let switchToTextTab = false; let switchToScreenshotTab = false; @@ -362,6 +363,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se if (captureListData.length > lastListDataLength.current) { userClosedDrawer.current = false; shouldOpenDrawer = true; + switchToListTab = true; } lastListDataLength.current = captureListData.length; } @@ -386,18 +388,31 @@ export const InterpretationLog: React.FC = ({ isOpen, se lastScreenshotDataLength.current = screenshotData.length; } + const getLatestCaptureType = () => { + for (let i = browserSteps.length - 1; i >= 0; i--) { + const type = browserSteps[i].type; + if (type === "list" || type === "text" || type === "screenshot") { + return type; + } + } + return null; + }; + if (shouldOpenDrawer) { setIsOpen(true); - if (switchToTextTab) { - setTimeout(() => { - const textTabIndex = getAvailableTabs().findIndex(tab => tab.id === 'captureText'); - if (textTabIndex !== -1) { - setActiveTab(textTabIndex); - } - }, 100); - } else if (switchToScreenshotTab) { - setTimeout(() => { - const screenshotTabIndex = getAvailableTabs().findIndex(tab => tab.id === 'captureScreenshot'); + const latestType = getLatestCaptureType(); + + setTimeout(() => { + if (latestType === "text") { + const idx = getAvailableTabs().findIndex(t => t.id === "captureText"); + if (idx !== -1) setActiveTab(idx); + + } else if (latestType === "list") { + const idx = getAvailableTabs().findIndex(t => t.id === "captureList"); + if (idx !== -1) setActiveTab(idx); + + } else if (latestType === "screenshot") { + const screenshotTabIndex = getAvailableTabs().findIndex(tab => tab.id === "captureScreenshot"); if (screenshotTabIndex !== -1) { setActiveTab(screenshotTabIndex); const latestIndex = screenshotData.length - 1; @@ -406,7 +421,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se if (!autoFocusedScreenshotIndices.current.has(latestIndex)) { autoFocusedScreenshotIndices.current.add(latestIndex); setTimeout(() => { - const screenshotSteps = browserSteps.filter(step => step.type === 'screenshot') as Array<{ id: number; name?: string; type: 'screenshot' }>; + const screenshotSteps = browserSteps.filter(step => step.type === "screenshot"); const latestScreenshotStep = screenshotSteps[latestIndex]; if (latestScreenshotStep) { const screenshotName = latestScreenshotStep.name || `Screenshot ${latestIndex + 1}`; @@ -415,8 +430,8 @@ export const InterpretationLog: React.FC = ({ isOpen, se }, 300); } } - }, 100); - } + } + }, 100); } }, [hasScrapeListAction, hasScrapeSchemaAction, hasScreenshotAction, captureListData, captureTextData, screenshotData, setIsOpen, getText]); From 6b0fac6491ed4dfe33d819b5c635e00c366e91d5 Mon Sep 17 00:00:00 2001 From: Rohit Rajan Date: Wed, 5 Nov 2025 13:04:47 +0530 Subject: [PATCH 02/29] feat: centralize tab and field editing --- src/components/run/InterpretationLog.tsx | 185 +++++++---------------- 1 file changed, 56 insertions(+), 129 deletions(-) diff --git a/src/components/run/InterpretationLog.tsx b/src/components/run/InterpretationLog.tsx index 05677724..a0042694 100644 --- a/src/components/run/InterpretationLog.tsx +++ b/src/components/run/InterpretationLog.tsx @@ -41,17 +41,14 @@ export const InterpretationLog: React.FC = ({ isOpen, se const [editingField, setEditingField] = useState<{listId: number, fieldKey: string} | null>(null); const [editingValue, setEditingValue] = useState(''); - const [editingListName, setEditingListName] = useState(null); - const [editingListNameValue, setEditingListNameValue] = useState(''); - const [editingTextGroupName, setEditingTextGroupName] = useState(false); const [editingTextGroupNameValue, setEditingTextGroupNameValue] = useState('Text Data'); - const [editingTextLabel, setEditingTextLabel] = useState(null); - const [editingTextLabelValue, setEditingTextLabelValue] = useState(''); - - const [editingScreenshotName, setEditingScreenshotName] = useState(null); - const [editingScreenshotNameValue, setEditingScreenshotNameValue] = useState(''); + const [editing, setEditing] = useState<{ + stepId: number | null; + type: 'list' | 'text' | 'screenshot' | null; + value: string; + }>({ stepId: null, type: null, value: '' }); const logEndRef = useRef(null); const autoFocusedListIds = useRef>(new Set()); @@ -125,30 +122,6 @@ export const InterpretationLog: React.FC = ({ isOpen, se } }; - const handleStartEditListName = (listId: number, currentName: string) => { - setEditingListName(listId); - setEditingListNameValue(currentName); - }; - - const handleSaveListName = () => { - if (editingListName !== null) { - const trimmedName = editingListNameValue.trim(); - const finalName = trimmedName || `List Data ${captureListData.findIndex(l => l.id === editingListName) + 1}`; - - updateListStepName(editingListName, finalName); - - // Use ref-synced version of browserSteps via emitForStepId - const listStep = browserSteps.find(step => step.id === editingListName); - if (listStep?.actionId) { - // small async delay ensures React state commit - setTimeout(() => emitForStepId(listStep.actionId!), 0); - } - - setEditingListName(null); - setEditingListNameValue(''); - } - }; - const handleStartEditTextGroupName = () => { setEditingTextGroupName(true); setEditingTextGroupNameValue(currentTextGroupName); @@ -158,7 +131,6 @@ export const InterpretationLog: React.FC = ({ isOpen, se const trimmedName = editingTextGroupNameValue.trim(); const finalName = trimmedName || 'Text Data'; - console.log("SAVING TEXT GROUP NAME:", finalName); setCurrentTextGroupName(finalName); setEditingTextGroupName(false); @@ -169,34 +141,6 @@ export const InterpretationLog: React.FC = ({ isOpen, se }, 0); }; - - const handleStartEditTextLabel = (textId: number, currentLabel: string) => { - setEditingTextLabel(textId); - setEditingTextLabelValue(currentLabel); - }; - - const handleSaveTextLabel = () => { - if (editingTextLabel !== null && editingTextLabelValue.trim()) { - const textStep = browserSteps.find(step => step.id === editingTextLabel); - const actionId = textStep?.actionId; - - updateBrowserTextStepLabel(editingTextLabel, editingTextLabelValue.trim()); - - // Emit updated action to backend after state update completes - if (actionId) { - setTimeout(() => emitForStepId(actionId), 0); - } - - setEditingTextLabel(null); - setEditingTextLabelValue(''); - } - }; - - const handleCancelTextLabel = () => { - setEditingTextLabel(null); - setEditingTextLabelValue(''); - }; - const handleDeleteTextStep = (textId: number) => { const textStep = browserSteps.find(step => step.id === textId); const actionId = textStep?.actionId; @@ -210,36 +154,36 @@ export const InterpretationLog: React.FC = ({ isOpen, se } }; - const handleStartEditScreenshotName = (screenshotStepId: number, currentName: string) => { - setEditingScreenshotName(screenshotStepId); - setEditingScreenshotNameValue(currentName); + const startEdit = (stepId: number, type: 'list' | 'text' | 'screenshot', currentValue: string) => { + setEditing({ stepId, type, value: currentValue }); }; - const handleSaveScreenshotName = () => { - if (editingScreenshotName !== null) { - const trimmedName = editingScreenshotNameValue.trim(); - const screenshotSteps = browserSteps.filter(step => step.type === 'screenshot'); - const screenshotIndex = screenshotSteps.findIndex(s => s.id === editingScreenshotName); - const finalName = trimmedName || `Screenshot ${screenshotIndex + 1}`; - - updateScreenshotStepName(editingScreenshotName, finalName); + const saveEdit = () => { + const { stepId, type, value } = editing; + if (stepId == null || !type) return; - const screenshotStep = browserSteps.find(step => step.id === editingScreenshotName); - if (screenshotStep?.actionId) { - const originalName = screenshotStep.name?.trim() || ""; - const trimmedName = editingScreenshotNameValue.trim(); - - // 🚫 Only emit if name actually changed - if (trimmedName && trimmedName !== originalName) { - setTimeout(() => emitForStepId(screenshotStep.actionId!), 500); - } else { - console.log("🧠 Skipping emit — screenshot name unchanged."); - } - } - - setEditingScreenshotName(null); - setEditingScreenshotNameValue(''); + const finalValue = value.trim(); + if (!finalValue) { + setEditing({ stepId: null, type: null, value: '' }); + return; } + + if (type === 'list') { + updateListStepName(stepId, finalValue); + } else if (type === 'text') { + updateBrowserTextStepLabel(stepId, finalValue); + } else if (type === 'screenshot') { + updateScreenshotStepName(stepId, finalValue); + } + + const step = browserSteps.find(s => s.id === stepId); + if (step?.actionId) setTimeout(() => emitForStepId(step.actionId!), 0); + + setEditing({ stepId: null, type: null, value: '' }); + }; + + const cancelEdit = () => { + setEditing({ stepId: null, type: null, value: '' }); }; @@ -354,16 +298,12 @@ export const InterpretationLog: React.FC = ({ isOpen, se useEffect(() => { let shouldOpenDrawer = false; - let switchToListTab = false; - let switchToTextTab = false; - let switchToScreenshotTab = false; if (hasScrapeListAction && captureListData.length > 0 && captureListData[0]?.data?.length > 0) { setShowPreviewData(true); if (captureListData.length > lastListDataLength.current) { userClosedDrawer.current = false; shouldOpenDrawer = true; - switchToListTab = true; } lastListDataLength.current = captureListData.length; } @@ -373,7 +313,6 @@ export const InterpretationLog: React.FC = ({ isOpen, se if (captureTextData.length > lastTextDataLength.current) { userClosedDrawer.current = false; shouldOpenDrawer = true; - switchToTextTab = true; } lastTextDataLength.current = captureTextData.length; } @@ -383,7 +322,6 @@ export const InterpretationLog: React.FC = ({ isOpen, se if (screenshotData.length > lastScreenshotDataLength.current) { userClosedDrawer.current = false; shouldOpenDrawer = true; - switchToScreenshotTab = true; } lastScreenshotDataLength.current = screenshotData.length; } @@ -425,7 +363,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se const latestScreenshotStep = screenshotSteps[latestIndex]; if (latestScreenshotStep) { const screenshotName = latestScreenshotStep.name || `Screenshot ${latestIndex + 1}`; - handleStartEditScreenshotName(latestScreenshotStep.id, screenshotName); + startEdit(latestScreenshotStep.id, 'screenshot', screenshotName); } }, 300); } @@ -439,7 +377,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se if (captureListData.length > 0 && isOpen && captureStage === 'initial') { const latestListIndex = captureListData.length - 1; const latestList = captureListData[latestListIndex]; - if (latestList && latestList.data && latestList.data.length > 0 && !editingListName) { + if (latestList && latestList.data && latestList.data.length > 0 && editing.type !== 'list') { const previousLength = previousDataLengths.current.get(latestList.id) || 0; const currentLength = latestList.data.length; @@ -448,7 +386,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se autoFocusedListIds.current.add(latestList.id); setActiveListTab(latestListIndex); setTimeout(() => { - handleStartEditListName(latestList.id, latestList.name || `List Data ${latestListIndex + 1}`); + startEdit(latestList.id, 'list', latestList.name || `List Data ${latestListIndex + 1}`); }, 300); } } @@ -594,7 +532,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se }} > {captureListData.map((listItem, index) => { - const isEditing = editingListName === listItem.id; + const isEditing = editing.stepId === listItem.id && editing.type === 'list'; const isActive = activeListTab === index; return ( @@ -612,10 +550,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se } }} onDoubleClick={() => { - handleStartEditListName( - listItem.id, - listItem.name || `List Data ${index + 1}` - ); + startEdit(listItem.id, 'list', listItem.name || `List Data ${index + 1}`) }} sx={{ px: 3, @@ -653,15 +588,12 @@ export const InterpretationLog: React.FC = ({ isOpen, se > {isEditing ? ( setEditingListNameValue(e.target.value)} - onBlur={handleSaveListName} + value={editing.value} + onChange={(e) => setEditing({ ...editing, value: e.target.value })} + onBlur={saveEdit} onKeyDown={(e) => { - if (e.key === 'Enter') handleSaveListName(); - if (e.key === 'Escape') { - setEditingListName(null); - setEditingListNameValue(''); - } + if (e.key === 'Enter') saveEdit(); + if (e.key === 'Escape') cancelEdit(); }} autoFocus size="small" @@ -857,7 +789,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se if (!screenshotStep) return null; const isActive = activeScreenshotTab === index; - const isEditing = editingScreenshotName === screenshotStep.id; + const isEditing = editing.stepId === screenshotStep.id && editing.type === 'screenshot'; const screenshotName = screenshotStep.name || `Screenshot ${index + 1}`; return ( @@ -873,9 +805,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se setActiveScreenshotTab(index); } }} - onDoubleClick={() => { - handleStartEditScreenshotName(screenshotStep.id, screenshotName); - }} + onDoubleClick={() => startEdit(screenshotStep.id, 'screenshot', screenshotName)} sx={{ px: 3, py: 1.25, @@ -910,15 +840,12 @@ export const InterpretationLog: React.FC = ({ isOpen, se > {isEditing ? ( setEditingScreenshotNameValue(e.target.value)} - onBlur={handleSaveScreenshotName} + value={editing.value} + onChange={(e) => setEditing({ ...editing, value: e.target.value })} + onBlur={saveEdit} onKeyDown={(e) => { - if (e.key === 'Enter') handleSaveScreenshotName(); - if (e.key === 'Escape') { - setEditingScreenshotName(null); - setEditingScreenshotNameValue(''); - } + if (e.key === 'Enter') saveEdit(); + if (e.key === 'Escape') cancelEdit(); }} autoFocus size="small" @@ -1074,7 +1001,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se {captureTextData.map((textStep: any, index) => { - const isEditing = editingTextLabel === textStep.id; + const isEditing = editing.stepId === textStep.id && editing.type === 'text'; return ( = ({ isOpen, se {isEditing ? ( setEditingTextLabelValue(e.target.value)} - onBlur={handleSaveTextLabel} + value={editing.value} + onChange={(e) => setEditing({ ...editing, value: e.target.value })} + onBlur={saveEdit} onKeyDown={(e) => { - if (e.key === 'Enter') handleSaveTextLabel(); - if (e.key === 'Escape') handleCancelTextLabel(); + if (e.key === 'Enter') saveEdit(); + if (e.key === 'Escape') cancelEdit(); }} autoFocus size="small" @@ -1117,7 +1044,7 @@ export const InterpretationLog: React.FC = ({ isOpen, se /> = ({ isOpen, se textDecoration: 'underline' } }} - onClick={() => handleStartEditTextLabel(textStep.id, textStep.label)} + onClick={() => startEdit(textStep.id, 'text', textStep.label)} > {textStep.label} From e37512c016f12c8705d7a5f5ccd3de290c30a1b0 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 16:35:51 +0530 Subject: [PATCH 03/29] fix: import path for ScheduleSettings --- src/pages/MainPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/MainPage.tsx b/src/pages/MainPage.tsx index 86178117..bf628fa6 100644 --- a/src/pages/MainPage.tsx +++ b/src/pages/MainPage.tsx @@ -11,7 +11,7 @@ import { createAndRunRecording, createRunForStoredRecording, CreateRunResponseWi import { io, Socket } from "socket.io-client"; import { stopRecording } from "../api/recording"; import { RunSettings } from "../components/run/RunSettings"; -import { ScheduleSettings } from "../components/robot/ScheduleSettings"; +import { ScheduleSettings } from "../components/robot/pages/ScheduleSettingsPage"; import { apiUrl } from "../apiConfig"; import { useNavigate } from 'react-router-dom'; import { AuthContext } from '../context/auth'; From 75b42b95e2c7c132a205418cc5b144bcc7932ebb Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 16:36:26 +0530 Subject: [PATCH 04/29] fix: import path for ScheduleSettings --- src/api/storage.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/storage.ts b/src/api/storage.ts index e584c36f..b5dc32de 100644 --- a/src/api/storage.ts +++ b/src/api/storage.ts @@ -1,7 +1,7 @@ import { default as axios } from "axios"; import { WorkflowFile } from "maxun-core"; import { RunSettings } from "../components/run/RunSettings"; -import { ScheduleSettings } from "../components/robot/ScheduleSettings"; +import { ScheduleSettings } from "../components/robot/pages/ScheduleSettingsPage"; import { CreateRunResponse, ScheduleRunResponse } from "../pages/MainPage"; import { apiUrl } from "../apiConfig"; From be90cc75d595dad955ad582bed00e8c8ec2efbff Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 20:25:59 +0530 Subject: [PATCH 05/29] fix: limit run output panel width --- src/components/run/RunContent.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/run/RunContent.tsx b/src/components/run/RunContent.tsx index 4cc787d1..197f4b1f 100644 --- a/src/components/run/RunContent.tsx +++ b/src/components/run/RunContent.tsx @@ -615,7 +615,7 @@ export const RunContent = ({ row, currentLog, interpretationInProgress, logEndRe return ( - + {row.status === 'running' || row.status === 'queued' ? ( From 3526a1a49a73285fe9805bae48e57632fcb8a131 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 20:30:10 +0530 Subject: [PATCH 06/29] feat: decouple menu components --- src/pages/PageWrapper.tsx | 71 ++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/src/pages/PageWrapper.tsx b/src/pages/PageWrapper.tsx index e257367b..83004fcc 100644 --- a/src/pages/PageWrapper.tsx +++ b/src/pages/PageWrapper.tsx @@ -13,6 +13,7 @@ import UserRoute from '../routes/userRoute'; import { Routes, Route, useNavigate, Navigate } from 'react-router-dom'; import { NotFoundPage } from '../components/dashboard/NotFound'; import RobotCreate from '../components/robot/pages/RobotCreate'; +import { Box } from '@mui/material'; export const PageWrapper = () => { const [open, setOpen] = useState(false); @@ -90,34 +91,48 @@ export const PageWrapper = () => { - {/* {!browserId && location.pathname !== '/recording' && } */} - {location.pathname !== '/recording' && } - - }> - } /> - } /> - } /> - } /> - } /> - } /> - - }> - - - - } /> - - } - /> - } - /> - } /> - + {/* Sticky NavBar - only show on non-recording pages */} + {location.pathname !== '/recording' && ( + + + + )} + + + }> + } /> + } /> + } /> + } /> + } /> + } /> + + }> + + + + } /> + + } + /> + } + /> + } /> + + From a515c9046a529f69a299db1975bfc47e82ef1241 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 20:30:24 +0530 Subject: [PATCH 07/29] feat: decouple menu components --- src/pages/MainPage.tsx | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/pages/MainPage.tsx b/src/pages/MainPage.tsx index bf628fa6..65647182 100644 --- a/src/pages/MainPage.tsx +++ b/src/pages/MainPage.tsx @@ -1,7 +1,7 @@ import React, { useCallback, useContext, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { MainMenu } from "../components/dashboard/MainMenu"; -import { Stack } from "@mui/material"; +import { Stack, Box } from "@mui/material"; import { Recordings } from "../components/robot/Recordings"; import { Runs } from "../components/run/Runs"; import ProxyForm from '../components/proxy/ProxyForm'; @@ -318,12 +318,31 @@ export const MainPage = ({ handleEditRecording, initialContent }: MainPageProps) } } - return ( - - +return ( + + {/* Sticky Sidebar */} + - + + + {/* Scrollable Content Area - Fills remaining space */} + {DisplayContent()} - - ); -}; + + +) +} From fb7c37dab963141c9c7429dd6519259100b9c468 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 20:39:35 +0530 Subject: [PATCH 08/29] feat: match proxy layout w new menu layout --- src/components/proxy/ProxyForm.tsx | 88 ++++++++++++++++++------------ 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/src/components/proxy/ProxyForm.tsx b/src/components/proxy/ProxyForm.tsx index 9b1e8ba5..c0902f41 100644 --- a/src/components/proxy/ProxyForm.tsx +++ b/src/components/proxy/ProxyForm.tsx @@ -156,19 +156,30 @@ const ProxyForm: React.FC = () => { }, []); return ( - <> - - + + + {t('proxy.title')} - + {tabIndex === 0 && ( isProxyConfigured ? ( - - + + @@ -187,13 +198,13 @@ const ProxyForm: React.FC = () => { - ) : ( - - + + { } /> - - + + } label={t('proxy.requires_auth')} /> - + {requiresAuth && ( <> - + { error={!!errors.username} helperText={errors.username || ''} /> - - + + { error={!!errors.password} helperText={errors.password || ''} /> - + )} ))} - + - - {t('proxy.alert.title')} -
- {t('proxy.alert.right_way')} -
- {t('proxy.alert.proxy_url')} http://proxy.com:1337 -
- {t('proxy.alert.username')} myusername -
- {t('proxy.alert.password')} mypassword -
-
- {t('proxy.alert.wrong_way')} -
- - {t('proxy.alert.proxy_url')} http://myusername:mypassword@proxy.com:1337 -
- + {/* Instructions Section */} + + + {t('proxy.alert.title')} +
+ {t('proxy.alert.right_way')} +
+ {t('proxy.alert.proxy_url')} http://proxy.com:1337 +
+ {t('proxy.alert.username')} myusername +
+ {t('proxy.alert.password')} mypassword +
+
+ {t('proxy.alert.wrong_way')} +
+ {t('proxy.alert.proxy_url')} http://myusername:mypassword@proxy.com:1337 +
+
+ ); }; + export default ProxyForm; \ No newline at end of file From e1d10042d75c4f552e537fcb7e6b168dd9f233d3 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 20:39:48 +0530 Subject: [PATCH 09/29] fix: format --- src/components/proxy/ProxyForm.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/proxy/ProxyForm.tsx b/src/components/proxy/ProxyForm.tsx index c0902f41..b9e60b86 100644 --- a/src/components/proxy/ProxyForm.tsx +++ b/src/components/proxy/ProxyForm.tsx @@ -156,17 +156,17 @@ const ProxyForm: React.FC = () => { }, []); return ( - - @@ -269,9 +269,9 @@ const ProxyForm: React.FC = () => { {/* Instructions Section */} - From 2aa4aff6089d43075ce47d95cba4c004d857eb74 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 20:54:35 +0530 Subject: [PATCH 10/29] feat: match api layout w new menu layout --- src/components/api/ApiKey.tsx | 137 +++++++++++++++++----------------- 1 file changed, 68 insertions(+), 69 deletions(-) diff --git a/src/components/api/ApiKey.tsx b/src/components/api/ApiKey.tsx index 9feb9551..2da3502f 100644 --- a/src/components/api/ApiKey.tsx +++ b/src/components/api/ApiKey.tsx @@ -107,73 +107,72 @@ const ApiKeyManager = () => { } return ( - - - Start by creating an API key below. Then, - - test your API - - or read the - API documentation - for setup instructions. - - - {t('apikey.title')} - - {apiKey ? ( - -
- - - {t('apikey.table.name')} - {t('apikey.table.key')} - {t('apikey.table.actions')} - - - - - {apiKeyName} - - - {showKey ? `${apiKey?.substring(0, 10)}...` : '**********'} - - - - - - - - - - setShowKey(!showKey)}> - {showKey ? : } - - - - - - - - - - -
-
- ) : ( - <> - {t('apikey.no_key_message')} - - - )} - - ); -}; - + + + Start by creating an API key below. Then, + + test your API + + or read the + API documentation + for setup instructions. + + + {t('apikey.title')} + + {apiKey ? ( + + + + + {t('apikey.table.name')} + {t('apikey.table.key')} + {t('apikey.table.actions')} + + + + + {apiKeyName} + + + {showKey ? `${apiKey?.substring(0, 10)}...` : '**********'} + + + + + + + + + + setShowKey(!showKey)}> + {showKey ? : } + + + + + + + + + + +
+
+ ) : ( + <> + {t('apikey.no_key_message')} + + + )} +
+); +} export default ApiKeyManager; \ No newline at end of file From 95ac9ce91343dd20035d39dfc39a66e41862066b Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 20:54:48 +0530 Subject: [PATCH 11/29] chore: lint --- src/components/api/ApiKey.tsx | 134 +++++++++++++++++----------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/src/components/api/ApiKey.tsx b/src/components/api/ApiKey.tsx index 2da3502f..c29f4ec8 100644 --- a/src/components/api/ApiKey.tsx +++ b/src/components/api/ApiKey.tsx @@ -107,72 +107,72 @@ const ApiKeyManager = () => { } return ( - - - Start by creating an API key below. Then, - - test your API - - or read the - API documentation - for setup instructions. - - - {t('apikey.title')} - - {apiKey ? ( - - - - - {t('apikey.table.name')} - {t('apikey.table.key')} - {t('apikey.table.actions')} - - - - - {apiKeyName} - - - {showKey ? `${apiKey?.substring(0, 10)}...` : '**********'} - - - - - - - - - - setShowKey(!showKey)}> - {showKey ? : } - - - - - - - - - - -
-
- ) : ( - <> - {t('apikey.no_key_message')} - - - )} -
-); + + + Start by creating an API key below. Then, + + test your API + + or read the + API documentation + for setup instructions. + + + {t('apikey.title')} + + {apiKey ? ( + + + + + {t('apikey.table.name')} + {t('apikey.table.key')} + {t('apikey.table.actions')} + + + + + {apiKeyName} + + + {showKey ? `${apiKey?.substring(0, 10)}...` : '**********'} + + + + + + + + + + setShowKey(!showKey)}> + {showKey ? : } + + + + + + + + + + +
+
+ ) : ( + <> + {t('apikey.no_key_message')} + + + )} +
+ ); } export default ApiKeyManager; \ No newline at end of file From 11fa50f727f1fbb272dd8034e2770849819acdad Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 20:55:51 +0530 Subject: [PATCH 12/29] chore: hidden api key --- src/components/api/ApiKey.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/api/ApiKey.tsx b/src/components/api/ApiKey.tsx index c29f4ec8..1e0386c9 100644 --- a/src/components/api/ApiKey.tsx +++ b/src/components/api/ApiKey.tsx @@ -140,7 +140,7 @@ const ApiKeyManager = () => { {apiKeyName} - {showKey ? `${apiKey?.substring(0, 10)}...` : '**********'} + {showKey ? `${apiKey?.substring(0, 20)}...` : '***************'} From c394198321c38829ff57f5f7d825fd021b6c7cd1 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 21:09:30 +0530 Subject: [PATCH 13/29] feat: match robot config layout w new menu layout --- .../robot/pages/RobotConfigPage.tsx | 238 +++++++++--------- 1 file changed, 117 insertions(+), 121 deletions(-) diff --git a/src/components/robot/pages/RobotConfigPage.tsx b/src/components/robot/pages/RobotConfigPage.tsx index d52b985e..ac841f0b 100644 --- a/src/components/robot/pages/RobotConfigPage.tsx +++ b/src/components/robot/pages/RobotConfigPage.tsx @@ -59,142 +59,138 @@ export const RobotConfigPage: React.FC = ({ }; return ( + + + + + {icon && ( + + {icon} + + )} + + {title} + + + + + - {/* Header Section - Fixed Position */} - - - - - {icon && ( - - {icon} - + {children} + + + {(showSaveButton || showCancelButton || onBackToSelection) && ( + + {onBackToSelection && ( + )} - - {title} - - - - {/* Content Section */} - - {children} - - - {/* Action Buttons */} - {(showSaveButton || showCancelButton || onBackToSelection) && ( - - {/* Left side - Back to Selection button */} - {onBackToSelection && ( + + {showCancelButton && ( )} - - {/* Right side - Save/Cancel buttons */} - - {showCancelButton && ( - - )} - {showSaveButton && onSave && ( - - )} - + }, + textTransform: 'none', + fontWeight: 500, + px: 3, + boxShadow: 'none', + }} + > + {isLoading ? t("buttons.saving") : (saveButtonText || t("buttons.save"))} + + )} - )} - - ); -}; + + )} + +); +} From 75bb63d19423eaea908063e337d02542c844e158 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 21:09:38 +0530 Subject: [PATCH 14/29] chore: lint --- .../robot/pages/RobotConfigPage.tsx | 232 +++++++++--------- 1 file changed, 116 insertions(+), 116 deletions(-) diff --git a/src/components/robot/pages/RobotConfigPage.tsx b/src/components/robot/pages/RobotConfigPage.tsx index ac841f0b..ccf6452b 100644 --- a/src/components/robot/pages/RobotConfigPage.tsx +++ b/src/components/robot/pages/RobotConfigPage.tsx @@ -59,138 +59,138 @@ export const RobotConfigPage: React.FC = ({ }; return ( - - - - - {icon && ( - - {icon} - - )} - - {title} - - - - - - {children} - - - {(showSaveButton || showCancelButton || onBackToSelection) && ( - - {onBackToSelection && ( - + + + + + {icon && ( + + {icon} + )} + + {title} + + + - - {showCancelButton && ( + + {children} + + + {(showSaveButton || showCancelButton || onBackToSelection) && ( + + {onBackToSelection && ( )} - {showSaveButton && onSave && ( - + )} + {showSaveButton && onSave && ( + - )} + }} + > + {isLoading ? t("buttons.saving") : (saveButtonText || t("buttons.save"))} + + )} + - - )} - -); + )} +
+ ); } From fbaf588169b3a1abbc91e80e390a4c8fa030374d Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 21:53:51 +0530 Subject: [PATCH 15/29] fix: remove minHeight --- src/components/robot/pages/RobotConfigPage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/robot/pages/RobotConfigPage.tsx b/src/components/robot/pages/RobotConfigPage.tsx index ccf6452b..e87c552c 100644 --- a/src/components/robot/pages/RobotConfigPage.tsx +++ b/src/components/robot/pages/RobotConfigPage.tsx @@ -66,7 +66,6 @@ export const RobotConfigPage: React.FC = ({ flexDirection: 'column', width: '100%', height: 'auto', - minHeight: 'calc(100vh - 64px)', boxSizing: 'border-box' }}> Date: Wed, 5 Nov 2025 21:57:14 +0530 Subject: [PATCH 16/29] fix: margins --- src/components/robot/pages/RobotConfigPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/robot/pages/RobotConfigPage.tsx b/src/components/robot/pages/RobotConfigPage.tsx index e87c552c..a5435ca3 100644 --- a/src/components/robot/pages/RobotConfigPage.tsx +++ b/src/components/robot/pages/RobotConfigPage.tsx @@ -122,7 +122,7 @@ export const RobotConfigPage: React.FC = ({ flexDirection: 'column', minHeight: 0, mt: 2, - mb: 3, + mb: 5, }}> {children} From c235ac240e55bd1e81d110105edd59b8cb258a52 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 22:01:34 +0530 Subject: [PATCH 17/29] fix: inherit bg for cancel button --- src/components/robot/pages/RobotConfigPage.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/robot/pages/RobotConfigPage.tsx b/src/components/robot/pages/RobotConfigPage.tsx index a5435ca3..6675aa3d 100644 --- a/src/components/robot/pages/RobotConfigPage.tsx +++ b/src/components/robot/pages/RobotConfigPage.tsx @@ -121,7 +121,7 @@ export const RobotConfigPage: React.FC = ({ display: 'flex', flexDirection: 'column', minHeight: 0, - mt: 2, + mt: 1.8, mb: 5, }}> {children} @@ -160,9 +160,7 @@ export const RobotConfigPage: React.FC = ({ onClick={handleBack} disabled={isLoading} sx={{ - color: '#ff00c3 !important', - borderColor: '#ff00c3 !important', - backgroundColor: 'white !important', + backgroundColor: 'inherit !important', }} > {cancelButtonText || t("buttons.cancel")} From 56467d5560c8a1632d0b9a1801f5dd6c0822aa75 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Wed, 5 Nov 2025 22:01:58 +0530 Subject: [PATCH 18/29] feat: cleaner UI --- .../robot/pages/ScheduleSettingsPage.tsx | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/components/robot/pages/ScheduleSettingsPage.tsx b/src/components/robot/pages/ScheduleSettingsPage.tsx index e386cfec..9f308487 100644 --- a/src/components/robot/pages/ScheduleSettingsPage.tsx +++ b/src/components/robot/pages/ScheduleSettingsPage.tsx @@ -188,8 +188,8 @@ export const ScheduleSettingsPage = ({ display: "flex", flexDirection: "column", alignItems: "flex-start", - "& > *": { marginBottom: "20px" }, - marginTop: "-20px", + gap: 3, + width: "100%", }} > <> @@ -215,7 +215,7 @@ export const ScheduleSettingsPage = ({ {t("schedule_settings.at_around")}: {schedule.atTimeStart},{" "} {schedule.timezone} {t("schedule_settings.timezone")}
- + )} From ea1114693b4b811735ae3a1d773b53b75e34d3d2 Mon Sep 17 00:00:00 2001 From: Karishma Date: Wed, 5 Nov 2025 23:44:30 +0530 Subject: [PATCH 29/29] Revert "fix: recorder ui bug " --- src/components/recorder/RightSidePanel.tsx | 19 ++----------------- src/pages/RecordingPage.tsx | 2 +- 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/src/components/recorder/RightSidePanel.tsx b/src/components/recorder/RightSidePanel.tsx index de0dfcb0..e22ab08b 100644 --- a/src/components/recorder/RightSidePanel.tsx +++ b/src/components/recorder/RightSidePanel.tsx @@ -534,24 +534,9 @@ export const RightSidePanel: React.FC = ({ onFinishCapture const isDarkMode = theme.darkMode; return ( - + - + {!isAnyActionActive && ( <> {showCaptureList && ( diff --git a/src/pages/RecordingPage.tsx b/src/pages/RecordingPage.tsx index b5810a84..6e362471 100644 --- a/src/pages/RecordingPage.tsx +++ b/src/pages/RecordingPage.tsx @@ -157,7 +157,7 @@ export const RecordingPage = ({ recordingName }: RecordingPageProps) => { <> -
+