From 65dbe624190bb3461be01387d547de1f9cb9027c Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Mon, 6 Oct 2025 12:34:09 +0100 Subject: [PATCH] options everywhere! --- .../main/resources/messages_en_GB.properties | 32 +++ .../src/components/tools/LegacyToolList.tsx | 147 ++++++++-- .../components/tools/LegacyToolSettings.tsx | 252 ++++++++++++++++++ .../components/tools/LegacyToolSurface.tsx | 31 ++- frontend/src/components/tools/ToolPanel.css | 39 +++ frontend/src/contexts/ToolWorkflowContext.tsx | 42 ++- 6 files changed, 505 insertions(+), 38 deletions(-) create mode 100644 frontend/src/components/tools/LegacyToolSettings.tsx diff --git a/app/core/src/main/resources/messages_en_GB.properties b/app/core/src/main/resources/messages_en_GB.properties index 71d876806..99fb34b0d 100644 --- a/app/core/src/main/resources/messages_en_GB.properties +++ b/app/core/src/main/resources/messages_en_GB.properties @@ -1981,3 +1981,35 @@ toolPanel.legacy.favorites=Favourites toolPanel.legacy.recent=Recently used toolPanel.legacy.favorite=Add to favourites toolPanel.legacy.unfavorite=Remove from favourites +toolPanel.legacy.settings.title=Customise appearance +toolPanel.legacy.settings.iconBackground.label=Tool icon background +toolPanel.legacy.settings.iconBackground.description=When to show coloured backgrounds behind tool icons +toolPanel.legacy.settings.iconBackground.none=None +toolPanel.legacy.settings.iconBackground.hover=On hover +toolPanel.legacy.settings.iconBackground.always=Always +toolPanel.legacy.settings.iconColor.label=Tool icon colour +toolPanel.legacy.settings.iconColor.description=Colour scheme for tool icons +toolPanel.legacy.settings.iconColor.colored=Coloured +toolPanel.legacy.settings.iconColor.vibrant=Vibrant +toolPanel.legacy.settings.iconColor.monochrome=Monochrome +toolPanel.legacy.settings.sectionTitle.label=Section titles +toolPanel.legacy.settings.sectionTitle.description=Colour for category section titles +toolPanel.legacy.settings.sectionTitle.colored=Coloured +toolPanel.legacy.settings.sectionTitle.neutral=Neutral +toolPanel.legacy.settings.headerIcon.label=Section header icons +toolPanel.legacy.settings.headerIcon.description=Colour for Favourites/Recent icons +toolPanel.legacy.settings.headerIcon.colored=Coloured +toolPanel.legacy.settings.headerIcon.monochrome=Monochrome +toolPanel.legacy.settings.headerBadge.label=Section header badges +toolPanel.legacy.settings.headerBadge.description=Colour for count badges in section headers +toolPanel.legacy.settings.headerBadge.colored=Coloured +toolPanel.legacy.settings.headerBadge.neutral=Neutral +toolPanel.legacy.settings.border.label=Tool item borders +toolPanel.legacy.settings.border.description=Show borders around tool items +toolPanel.legacy.settings.border.visible=Visible +toolPanel.legacy.settings.border.hidden=Hidden +toolPanel.legacy.settings.hover.label=Hover effect intensity +toolPanel.legacy.settings.hover.description=How prominent the hover effect should be +toolPanel.legacy.settings.hover.subtle=Subtle +toolPanel.legacy.settings.hover.moderate=Moderate +toolPanel.legacy.settings.hover.prominent=Prominent diff --git a/frontend/src/components/tools/LegacyToolList.tsx b/frontend/src/components/tools/LegacyToolList.tsx index 64bde4291..7d7e40878 100644 --- a/frontend/src/components/tools/LegacyToolList.tsx +++ b/frontend/src/components/tools/LegacyToolList.tsx @@ -33,7 +33,7 @@ const LegacyToolList = ({ }: LegacyToolListProps) => { const { t } = useTranslation(); const { hotkeys } = useHotkeys(); - const { toolRegistry, recentTools, favoriteTools, toggleFavorite, isFavorite } = useToolWorkflow(); + const { toolRegistry, recentTools, favoriteTools, toggleFavorite, isFavorite, legacyToolSettings } = useToolWorkflow(); const { sections, searchGroups } = useToolSections(filteredTools, searchQuery); @@ -85,6 +85,38 @@ const LegacyToolList = ({ ? 'tool-panel__legacy-groups tool-panel__legacy-groups--detailed' : 'tool-panel__legacy-groups tool-panel__legacy-groups--compact'; + const getItemClasses = (isDetailed: boolean) => { + const base = isDetailed ? 'tool-panel__legacy-item--detailed' : ''; + const border = legacyToolSettings.toolItemBorder === 'hidden' ? 'tool-panel__legacy-item--no-border' : ''; + const hover = `tool-panel__legacy-item--hover-${legacyToolSettings.hoverIntensity}`; + return [base, border, hover].filter(Boolean).join(' '); + }; + + const getIconBackground = (categoryColor: string, isDetailed: boolean) => { + if (legacyToolSettings.iconBackground === 'none' || legacyToolSettings.iconBackground === 'hover') { + return 'transparent'; + } + + const baseColor = isDetailed ? 'var(--legacy-bg-icon-detailed)' : 'var(--legacy-bg-icon-compact)'; + const blend1 = isDetailed ? '18%' : '15%'; + const blend2 = isDetailed ? '8%' : '6%'; + + return `linear-gradient(135deg, + color-mix(in srgb, ${categoryColor} ${blend1}, ${baseColor}), + color-mix(in srgb, ${categoryColor} ${blend2}, ${baseColor}) + )`; + }; + + const getIconStyle = () => { + if (legacyToolSettings.iconColorScheme === 'monochrome') { + return { filter: 'grayscale(1) opacity(0.8)' }; + } + if (legacyToolSettings.iconColorScheme === 'vibrant') { + return { filter: 'saturate(1.5) brightness(1.1)' }; + } + return {}; + }; + // Helper function to render a tool item const renderToolItem = (id: string, tool: ToolRegistryEntry) => { const matchedText = matchedTextMap.get(id); @@ -123,25 +155,37 @@ const LegacyToolList = ({ // Detailed view if (showDescriptions) { + const iconBg = getIconBackground(categoryColor, true); + const iconClasses = legacyToolSettings.iconBackground === 'hover' + ? 'tool-panel__legacy-icon tool-panel__legacy-icon--hover-bg' + : 'tool-panel__legacy-icon'; + + const hoverBgDetailed = legacyToolSettings.iconBackground === 'hover' + ? `linear-gradient(135deg, + color-mix(in srgb, ${categoryColor} 18%, var(--legacy-bg-icon-detailed)), + color-mix(in srgb, ${categoryColor} 8%, var(--legacy-bg-icon-detailed)) + )` + : undefined; + return (