- Improved the useEnhancedProcessedFiles hook to only update processed files when content changes.
- Added preview functionality for split PDF files in the HomePage component.
- Implemented a new PDFExportService with enhanced error handling and file validation.
- Updated Split tool to generate and display thumbnails for split PDF files.
- Introduced a comprehensive FileOperationHistory component to track and display file operations.
- Enhanced file context types to support new operation types and history management.
- Created a ZipFileService for validating and extracting PDF files from ZIP archives.
- Changed selectedPages, draggedPage, dropTarget, and movingPage props from string to number type.
- Updated event handlers and state management to reflect the use of page numbers.
- Enhanced logging for better debugging during thumbnail generation and worker communication.
refactor: Simplify FileContext by removing mergedDocuments state and related actions
- Removed mergedDocuments from FileContextState and associated actions in the reducer.
- Updated selectedPageIds to selectedPageNumbers for consistency in page selection handling.
fix: Improve thumbnail generation service logging and error handling
- Added detailed logging for thumbnail generation progress and worker job management.
- Implemented better error handling for worker timeouts and main thread fallbacks.
style: Clean up FileGrid component for better readability and maintainability
- Adjusted formatting and spacing in the FileGrid component for improved code clarity.
Major performance improvements and UX enhancements:
PERFORMANCE FIXES:
- Add merged document caching in FileContext to prevent re-processing on view switches
- Implement hash-based cache fallback for File object identity preservation
- Add pagination for large documents (>200 pages) to prevent DOM overload
- Convert synchronous operations to async chunked processing
- Optimize effect dependencies to prevent unnecessary re-renders
- Remove aggressive cleanup on view switches that destroyed caches
UI/UX IMPROVEMENTS:
- Add immediate visual feedback with loading spinners in view switching buttons
- Implement skeleton loaders for smooth transitions during processing
- Add progress indicators with real-time percentages
- Defer heavy operations using requestAnimationFrame to allow UI updates
- Create reusable SkeletonLoader component for consistent loading states
CACHE SYSTEM:
- Move processed file cache management to FileContext for persistence
- Add stable cache key generation based on file combinations
- Implement smart cache invalidation only when files are actually removed
- Preserve thumbnails and page data across view switches
BUG FIXES:
- Fix infinite loop errors caused by circular hook dependencies
- Resolve File object recreation breaking Map lookups
- Fix thumbnail loading issues in PageEditor
- Prevent UI thread blocking during PDF merging operations
TECHNICAL DEBT:
- Centralize memory management in FileContext
- Add proper cleanup for removed files while preserving active caches
- Implement async/await patterns for better error handling
- Add performance debugging with console timing
Result: PageEditor now loads instantly when returning to cached files,
large documents render smoothly with pagination, and view switching
provides immediate feedback even during heavy operations.
# Description of Changes
- Added `charset = utf-8` and defined `indent_size = 2` for `*.css`,
`*.json`, `*.jsonc`, and `*.yml` in `.editorconfig` to ensure consistent
formatting across file types.
- Improved labeler rules in `.github/labeler-config-srvaroa.yml` by
expanding path coverage for labeling Java and CI-related files.
- Upgraded pre-commit hooks:
- `ruff` from `v0.11.11` to `v0.12.0`
- `gitleaks` from `v8.26.0` to `v8.27.2`
- Updated `codespell` args to ignore new terms like `thirdParty`,
`tabEl`, `tabEls`.
- Enhanced `.vscode/settings.json` and `extensions.json`:
- Added formatting rules for `json`, `jsonc`, `markdown`, `python`, and
`gradle` files.
- Included additional extensions for Markdown and Gradle.
- Applied detailed HTML formatting preferences.
---
## Checklist
### General
- [x] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [x] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md)
(if applicable)
- [x] I have performed a self-review of my own code
- [x] My changes generate no new warnings
### Documentation
- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)
### UI Changes (if applicable)
- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)
### Testing (if applicable)
- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing)
for more details.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
# Description of Changes
- Added a new GitHub Actions workflow
`.github/workflows/ai_pr_title_review.yml` to perform AI-powered PR
title evaluations
- Introduced configuration files:
- `.github/config/repo_devs.json` to define trusted developers
- `.github/config/system-prompt.txt` as the system prompt for the AI
model
- Workflow checks the PR actor against the `repo_devs.json` list and
evaluates the PR title if the actor is a listed developer
- Integrates GPT-4o via `actions/ai-inference` to analyze diffs and
suggest improved PR titles in JSON
- Posts a suggestion comment or praise, depending on AI rating, using
`github-script`
- Supports secure repo setup with hardened runners and tokenized GitHub
App bot access
---
## Checklist
### General
- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md)
(if applicable)
- [ ] I have performed a self-review of my own code
- [ ] My changes generate no new warnings
### Documentation
- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)
### UI Changes (if applicable)
- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)
### Testing (if applicable)
- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing)
for more details.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>