mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-08-27 06:39:24 +00:00
Merge branch 'V2' into UIUX/V2/StylingSnags
This commit is contained in:
commit
5d00425690
@ -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.",
|
||||||
|
@ -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,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user