diff --git a/frontend/public/branding/StirlingPDFLogoNoTextDark.svg b/frontend/public/branding/StirlingPDFLogoNoTextDark.svg index 001c6a01c..a6f82dd6f 100644 --- a/frontend/public/branding/StirlingPDFLogoNoTextDark.svg +++ b/frontend/public/branding/StirlingPDFLogoNoTextDark.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/frontend/public/branding/StirlingPDFLogoNoTextLight.svg b/frontend/public/branding/StirlingPDFLogoNoTextLight.svg index a0fa9cee5..62a5b3838 100644 --- a/frontend/public/branding/StirlingPDFLogoNoTextLight.svg +++ b/frontend/public/branding/StirlingPDFLogoNoTextLight.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/frontend/src/components/shared/AllToolsNavButton.tsx b/frontend/src/components/shared/AllToolsNavButton.tsx index f2b308b26..c1b5774d2 100644 --- a/frontend/src/components/shared/AllToolsNavButton.tsx +++ b/frontend/src/components/shared/AllToolsNavButton.tsx @@ -26,7 +26,7 @@ const AllToolsNavButton: React.FC = ({ activeButton, set const iconNode = ( - + ); diff --git a/frontend/src/components/shared/LandingPage.tsx b/frontend/src/components/shared/LandingPage.tsx index 14322076e..92078e850 100644 --- a/frontend/src/components/shared/LandingPage.tsx +++ b/frontend/src/components/shared/LandingPage.tsx @@ -36,7 +36,7 @@ const LandingPage = () => { }; return ( - + {/* White PDF Page Background */} { left: '50%', transform: 'translateX(-50%)', bottom: 0, - borderRadius: '0.5rem 0.5rem 0 0', + borderRadius: '0.25rem 0.25rem 0 0', filter: 'var(--drop-shadow-filter)', backgroundColor: 'var(--landing-paper-bg)', transition: 'background-color 0.4s ease', @@ -66,7 +66,7 @@ const LandingPage = () => { style={{ position: 'absolute', top: 0, - right: ".5rem", + right: 0, zIndex: 10, }} @@ -75,15 +75,13 @@ const LandingPage = () => { src={colorScheme === 'dark' ? '/branding/StirlingPDFLogoNoTextDark.svg' : '/branding/StirlingPDFLogoNoTextLight.svg'} alt="Stirling PDF Logo" style={{ - width: '10rem', height: 'auto', pointerEvents: 'none', - marginTop: '-0.5rem' }} />
(({ { id: 'automate', name: t("quickAccess.automate", "Automate"), - icon: , + icon: , size: 'lg', isRound: false, type: 'navigation', @@ -80,7 +80,7 @@ const QuickAccessBar = forwardRef(({ { id: 'files', name: t("quickAccess.files", "Files"), - icon: , + icon: , isRound: true, size: 'lg', type: 'modal', @@ -151,7 +151,7 @@ const QuickAccessBar = forwardRef(({
{ config.onClick(); diff --git a/frontend/src/components/shared/TopControls.tsx b/frontend/src/components/shared/TopControls.tsx index 9c41b35e0..1a9dbbd9f 100644 --- a/frontend/src/components/shared/TopControls.tsx +++ b/frontend/src/components/shared/TopControls.tsx @@ -6,6 +6,7 @@ import VisibilityIcon from "@mui/icons-material/Visibility"; import EditNoteIcon from "@mui/icons-material/EditNote"; import FolderIcon from "@mui/icons-material/Folder"; import { ModeType, isValidMode } from '../../contexts/NavigationContext'; +import { Tooltip } from "./Tooltip"; const viewOptionStyle = { display: 'inline-flex', @@ -17,8 +18,8 @@ const viewOptionStyle = { } -// Create view options with icons and loading states -const createViewOptions = (switchingTo: ModeType | null) => [ +// Build view options showing text only for current view; others icon-only with tooltip +const createViewOptions = (currentView: ModeType, switchingTo: ModeType | null) => [ { label: (
@@ -34,27 +35,35 @@ const createViewOptions = (switchingTo: ModeType | null) => [ }, { label: ( -
- {switchingTo === "pageEditor" ? ( - - ) : ( - - )} - Page Editor -
+ +
+ {currentView === "pageEditor" ? ( + <> + {switchingTo === "pageEditor" ? : } + Page Editor + + ) : ( + switchingTo === "pageEditor" ? : + )} +
+
), value: "pageEditor", }, { label: ( -
- {switchingTo === "fileEditor" ? ( - - ) : ( - - )} - File Manager -
+ +
+ {currentView === "fileEditor" ? ( + <> + {switchingTo === "fileEditor" ? : } + Active Files + + ) : ( + switchingTo === "fileEditor" ? : + )} +
+
), value: "fileEditor", }, @@ -103,11 +112,10 @@ const TopControls = ({ {!isToolSelected && (
diff --git a/frontend/src/components/tools/ToolPanel.tsx b/frontend/src/components/tools/ToolPanel.tsx index 69a012690..fa41fcaff 100644 --- a/frontend/src/components/tools/ToolPanel.tsx +++ b/frontend/src/components/tools/ToolPanel.tsx @@ -41,7 +41,7 @@ export default function ToolPanel() { isRainbowMode ? rainbowStyles.rainbowPaper : '' }`} style={{ - width: isPanelVisible ? '20rem' : '0', + width: isPanelVisible ? '18.5rem' : '0', padding: '0' }} > diff --git a/frontend/src/components/tools/ToolPicker.tsx b/frontend/src/components/tools/ToolPicker.tsx index 9a46c8a3e..22f92eb93 100644 --- a/frontend/src/components/tools/ToolPicker.tsx +++ b/frontend/src/components/tools/ToolPicker.tsx @@ -131,7 +131,7 @@ const ToolPicker = ({ selectedToolKey, onSelect, filteredTools, isSearching = fa borderTop: `0.0625rem solid var(--tool-header-border)`, borderBottom: `0.0625rem solid var(--tool-header-border)`, padding: "0.5rem 1rem", - fontWeight: 700, + fontWeight: 600, background: "var(--tool-header-bg)", color: "var(--tool-header-text)", cursor: "pointer", @@ -141,7 +141,7 @@ const ToolPicker = ({ selectedToolKey, onSelect, filteredTools, isSearching = fa }} onClick={() => scrollTo(quickAccessRef)} > - {t("toolPicker.quickAccess", "QUICK ACCESS")} + {t("toolPicker.quickAccess", "QUICK ACCESS")}
- + {quickSection?.subcategories.map(sc => renderToolButtons(t, sc, selectedToolKey, onSelect, false) @@ -177,7 +177,7 @@ const ToolPicker = ({ selectedToolKey, onSelect, filteredTools, isSearching = fa borderTop: `0.0625rem solid var(--tool-header-border)`, borderBottom: `0.0625rem solid var(--tool-header-border)`, padding: "0.5rem 1rem", - fontWeight: 700, + fontWeight: 600, background: "var(--tool-header-bg)", color: "var(--tool-header-text)", cursor: "pointer", @@ -187,7 +187,7 @@ const ToolPicker = ({ selectedToolKey, onSelect, filteredTools, isSearching = fa }} onClick={() => scrollTo(allToolsRef)} > - {t("toolPicker.allTools", "ALL TOOLS")} + {t("toolPicker.allTools", "ALL TOOLS")} { const { t } = useTranslation(); const { openFilesModal, onFilesSelect } = useFilesModalContext(); diff --git a/frontend/src/components/tools/shared/ToolStep.tsx b/frontend/src/components/tools/shared/ToolStep.tsx index 9d86d2f03..4201fd82d 100644 --- a/frontend/src/components/tools/shared/ToolStep.tsx +++ b/frontend/src/components/tools/shared/ToolStep.tsx @@ -50,7 +50,7 @@ const renderTooltipTitle = ( sidebarTooltip={true} > e.stopPropagation()}> - + {title} @@ -60,7 +60,7 @@ const renderTooltipTitle = ( } return ( - + {title} ); @@ -96,7 +96,7 @@ const ToolStep = ({
{shouldShowNumber && ( - + {stepNumber} )} @@ -135,7 +135,7 @@ const ToolStep = ({ {!isCollapsed && ( - + {helpText && ( {helpText} @@ -145,7 +145,7 @@ const ToolStep = ({ )}
- +
); } diff --git a/frontend/src/components/tools/shared/renderToolButtons.tsx b/frontend/src/components/tools/shared/renderToolButtons.tsx index eb9c9be6d..a7535e0e0 100644 --- a/frontend/src/components/tools/shared/renderToolButtons.tsx +++ b/frontend/src/components/tools/shared/renderToolButtons.tsx @@ -19,7 +19,7 @@ export const renderToolButtons = ( {showSubcategoryHeader && ( )} - +
{subcategory.tools.map(({ id, tool }) => ( ))} - +
); diff --git a/frontend/src/components/tools/toolPicker/ToolButton.tsx b/frontend/src/components/tools/toolPicker/ToolButton.tsx index 185eed5ed..bd54f7e13 100644 --- a/frontend/src/components/tools/toolPicker/ToolButton.tsx +++ b/frontend/src/components/tools/toolPicker/ToolButton.tsx @@ -12,8 +12,10 @@ interface ToolButtonProps { rounded?: boolean; } -const ToolButton: React.FC = ({ id, tool, isSelected, onSelect, rounded = false }) => { +const ToolButton: React.FC = ({ id, tool, isSelected, onSelect }) => { + const isUnavailable = !tool.component && !tool.link; const handleClick = (id: string) => { + if (isUnavailable) return; if (tool.link) { // Open external link in new tab window.open(tool.link, '_blank', 'noopener,noreferrer'); @@ -23,35 +25,30 @@ const ToolButton: React.FC = ({ id, tool, isSelected, onSelect, onSelect(id); }; + const tooltipContent = isUnavailable + ? (Coming soon: {tool.description}) + : tool.description; + return ( - + diff --git a/frontend/src/components/viewer/Viewer.tsx b/frontend/src/components/viewer/Viewer.tsx index c1a2b440a..cdf831c06 100644 --- a/frontend/src/components/viewer/Viewer.tsx +++ b/frontend/src/components/viewer/Viewer.tsx @@ -550,12 +550,14 @@ const Viewer = ({ justifyContent: "center", pointerEvents: "none", background: "transparent", + }} > allTools[key].component !== null || allTools[key].link) - .reduce((obj, key) => { - obj[key] = allTools[key]; - return obj; - }, {} as ToolRegistry); - return filteredTools; } + const filteredTools = Object.keys(allTools) + .filter(key => allTools[key].component !== null || allTools[key].link) + .reduce((obj, key) => { + obj[key] = allTools[key]; + return obj; + }, {} as ToolRegistry); + return filteredTools; }, [t]); // Only re-compute when translations change } diff --git a/frontend/src/hooks/useToolSections.ts b/frontend/src/hooks/useToolSections.ts index 41762a8e1..d0f6ebdca 100644 --- a/frontend/src/hooks/useToolSections.ts +++ b/frontend/src/hooks/useToolSections.ts @@ -64,7 +64,9 @@ export function useToolSections(filteredTools: [string /* FIX ME: Should be Tool Object.entries(subs).forEach(([s, tools]) => { const subcategoryId = s as SubcategoryId; if (!quick[subcategoryId]) quick[subcategoryId] = []; - quick[subcategoryId].push(...tools); + // Only include ready tools (have a component or external link) in Quick Access + const readyTools = tools.filter(({ tool }) => tool.component !== null || !!tool.link); + quick[subcategoryId].push(...readyTools); }); } });