Merge branch 'V2' into UIUX/V2/StylingSnags

This commit is contained in:
James Brunton 2025-08-26 16:13:29 +01:00 committed by GitHub
commit 5d00425690
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 71 additions and 70 deletions

View File

@ -2127,7 +2127,7 @@
"selectedCount": "{{count}} selected", "selectedCount": "{{count}} selected",
"download": "Download", "download": "Download",
"delete": "Delete", "delete": "Delete",
"unsupported":"Unsupported" "unsupported": "Unsupported"
}, },
"storage": { "storage": {
"temporaryNotice": "Files are stored temporarily in your browser and may be cleared automatically", "temporaryNotice": "Files are stored temporarily in your browser and may be cleared automatically",
@ -2299,75 +2299,74 @@
} }
}, },
"automate": { "automate": {
"title": "Automate", "title": "Automate",
"desc": "Build multi-step workflows by chaining together PDF actions. Ideal for recurring tasks.", "desc": "Build multi-step workflows by chaining together PDF actions. Ideal for recurring tasks.",
"invalidStep": "Invalid step", "invalidStep": "Invalid step",
"files": { "files": {
"placeholder": "Select files to process with this automation" "placeholder": "Select files to process with this automation"
},
"selection": {
"title": "Automation Selection",
"saved": {
"title": "Saved"
}, },
"selection": { "createNew": {
"title": "Automation Selection", "title": "Create New Automation"
"saved": {
"title": "Saved"
},
"createNew": {
"title": "Create New Automation"
},
"suggested": {
"title": "Suggested"
}
}, },
"creation": { "suggested": {
"createTitle": "Create Automation", "title": "Suggested"
"editTitle": "Edit Automation", }
"description": "Automations run tools sequentially. To get started, add tools in the order you want them to run.", },
"name": { "creation": {
"placeholder": "Automation name" "createTitle": "Create Automation",
}, "editTitle": "Edit Automation",
"tools": { "description": "Automations run tools sequentially. To get started, add tools in the order you want them to run.",
"selectTool": "Select a tool...", "name": {
"selected": "Selected Tools", "placeholder": "Automation name"
"remove": "Remove tool",
"configure": "Configure tool",
"notConfigured": "! Not Configured",
"addTool": "Add Tool",
"add": "Add a tool..."
},
"save": "Save Automation",
"unsavedChanges": {
"title": "Unsaved Changes",
"message": "You have unsaved changes. Are you sure you want to go back? All changes will be lost.",
"cancel": "Cancel",
"confirm": "Go Back"
}
}, },
"run": { "tools": {
"title": "Run Automation" "selectTool": "Select a tool...",
"selected": "Selected Tools",
"remove": "Remove tool",
"configure": "Configure tool",
"notConfigured": "! Not Configured",
"addTool": "Add Tool",
"add": "Add a tool..."
}, },
"sequence": { "save": "Save Automation",
"unnamed": "Unnamed Automation", "unsavedChanges": {
"steps": "{{count}} steps", "title": "Unsaved Changes",
"running": "Running Automation...", "message": "You have unsaved changes. Are you sure you want to go back? All changes will be lost.",
"run": "Run Automation",
"finish": "Finish"
},
"reviewTitle": "Automation Results",
"config": {
"loading": "Loading tool configuration...",
"noSettings": "This tool does not have configurable settings.",
"title": "Configure {{toolName}}",
"description": "Configure the settings for this tool. These settings will be applied when the automation runs.",
"cancel": "Cancel", "cancel": "Cancel",
"save": "Save Configuration" "confirm": "Go Back"
}, }
"copyToSaved": "Copy to Saved" },
} "run": {
"title": "Run Automation"
},
"sequence": {
"unnamed": "Unnamed Automation",
"steps": "{{count}} steps",
"running": "Running Automation...",
"run": "Run Automation",
"finish": "Finish"
},
"reviewTitle": "Automation Results",
"config": {
"loading": "Loading tool configuration...",
"noSettings": "This tool does not have configurable settings.",
"title": "Configure {{toolName}}",
"description": "Configure the settings for this tool. These settings will be applied when the automation runs.",
"cancel": "Cancel",
"save": "Save Configuration"
},
"copyToSaved": "Copy to Saved"
}, },
"automation": { "automation": {
"suggested": { "suggested": {
"securePdfIngestion": "Secure PDF Ingestion", "securePdfIngestion": "Secure PDF Ingestion",
"securePdfIngestionDesc": "Comprehensive PDF processing workflow that sanitises documents, applies OCR with cleanup, converts to PDF/A format for long-term archival, and optimises file size.", "securePdfIngestionDesc": "Comprehensive PDF processing workflow that sanitises documents, applies OCR with cleanup, converts to PDF/A format for long-term archival, and optimises file size.",
"emailPreparation": "Email Preparation", "emailPreparation": "Email Preparation",
"emailPreparationDesc": "Optimises PDFs for email distribution by compressing files, splitting large documents into 20MB chunks for email compatibility, and removing metadata for privacy.", "emailPreparationDesc": "Optimises PDFs for email distribution by compressing files, splitting large documents into 20MB chunks for email compatibility, and removing metadata for privacy.",
"secureWorkflow": "Security Workflow", "secureWorkflow": "Security Workflow",
"secureWorkflowDesc": "Secures PDF documents by removing potentially malicious content like JavaScript and embedded files, then adds password protection to prevent unauthorised access.", "secureWorkflowDesc": "Secures PDF documents by removing potentially malicious content like JavaScript and embedded files, then adds password protection to prevent unauthorised access.",

View File

@ -11,6 +11,8 @@ interface RainbowThemeHook {
deactivateRainbow: () => void; deactivateRainbow: () => void;
} }
const allowRainbowMode = false; // Override to allow/disallow fun
export function useRainbowTheme(initialTheme: 'light' | 'dark' = 'light'): RainbowThemeHook { export function useRainbowTheme(initialTheme: 'light' | 'dark' = 'light'): RainbowThemeHook {
// Get theme from localStorage or use initial // Get theme from localStorage or use initial
const [themeMode, setThemeMode] = useState<ThemeMode>(() => { const [themeMode, setThemeMode] = useState<ThemeMode>(() => {
@ -35,11 +37,11 @@ export function useRainbowTheme(initialTheme: 'light' | 'dark' = 'light'): Rainb
// Save theme to localStorage whenever it changes // Save theme to localStorage whenever it changes
useEffect(() => { useEffect(() => {
localStorage.setItem('stirling-theme', themeMode); localStorage.setItem('stirling-theme', themeMode);
// Apply rainbow class to body if in rainbow mode // Apply rainbow class to body if in rainbow mode
if (themeMode === 'rainbow') { if (themeMode === 'rainbow') {
document.body.classList.add('rainbow-mode-active'); document.body.classList.add('rainbow-mode-active');
// Show easter egg notification // Show easter egg notification
showRainbowNotification(); showRainbowNotification();
} else { } else {
@ -77,7 +79,7 @@ export function useRainbowTheme(initialTheme: 'light' | 'dark' = 'light'): Rainb
pointer-events: none; pointer-events: none;
transition: opacity 0.3s ease; transition: opacity 0.3s ease;
`; `;
document.body.appendChild(notification); document.body.appendChild(notification);
// Auto-remove notification after 3 seconds // Auto-remove notification after 3 seconds
@ -121,7 +123,7 @@ export function useRainbowTheme(initialTheme: 'light' | 'dark' = 'light'): Rainb
pointer-events: none; pointer-events: none;
transition: opacity 0.3s ease; transition: opacity 0.3s ease;
`; `;
document.body.appendChild(notification); document.body.appendChild(notification);
// Auto-remove notification after 2 seconds // Auto-remove notification after 2 seconds
@ -144,7 +146,7 @@ export function useRainbowTheme(initialTheme: 'light' | 'dark' = 'light'): Rainb
} }
const currentTime = Date.now(); const currentTime = Date.now();
// Simple exit from rainbow mode with single click (after cooldown period) // Simple exit from rainbow mode with single click (after cooldown period)
if (themeMode === 'rainbow') { if (themeMode === 'rainbow') {
setThemeMode('light'); setThemeMode('light');
@ -152,7 +154,7 @@ export function useRainbowTheme(initialTheme: 'light' | 'dark' = 'light'): Rainb
showExitNotification(); showExitNotification();
return; return;
} }
// Reset counter if too much time has passed (2.5 seconds) // Reset counter if too much time has passed (2.5 seconds)
if (currentTime - lastToggleTime.current > 2500) { if (currentTime - lastToggleTime.current > 2500) {
toggleCount.current = 1; toggleCount.current = 1;
@ -162,18 +164,18 @@ export function useRainbowTheme(initialTheme: 'light' | 'dark' = 'light'): Rainb
lastToggleTime.current = currentTime; lastToggleTime.current = currentTime;
// Easter egg: Activate rainbow mode after 10 rapid toggles // Easter egg: Activate rainbow mode after 10 rapid toggles
if (toggleCount.current >= 10) { if (allowRainbowMode && toggleCount.current >= 10) {
setThemeMode('rainbow'); setThemeMode('rainbow');
console.log('🌈 RAINBOW MODE ACTIVATED! 🌈 You found the secret easter egg!'); console.log('🌈 RAINBOW MODE ACTIVATED! 🌈 You found the secret easter egg!');
console.log('🌈 Button will be disabled for 3 seconds, then click once to exit!'); console.log('🌈 Button will be disabled for 3 seconds, then click once to exit!');
// Disable toggle for 3 seconds // Disable toggle for 3 seconds
setIsToggleDisabled(true); setIsToggleDisabled(true);
setTimeout(() => { setTimeout(() => {
setIsToggleDisabled(false); setIsToggleDisabled(false);
console.log('🌈 Theme toggle re-enabled! Click once to exit rainbow mode.'); console.log('🌈 Theme toggle re-enabled! Click once to exit rainbow mode.');
}, 3000); }, 3000);
// Reset counter // Reset counter
toggleCount.current = 0; toggleCount.current = 0;
return; return;
@ -203,4 +205,4 @@ export function useRainbowTheme(initialTheme: 'light' | 'dark' = 'light'): Rainb
activateRainbow, activateRainbow,
deactivateRainbow, deactivateRainbow,
}; };
} }