feat: enhance image import and solvability calculation (v1.13.0)
All checks were successful
Deploy to Production / deploy (push) Successful in 18s

- Implement non-linear threshold slider (histogram percentile method)
- Add real-time solvability calculation with progress indicator
- Improve solvability logic with generative lookahead (smash)
- Update ImageImportModal UI (alpha preview, grid size 5-80)
- Add missing translations and difficulty labels
- Optimize web worker pool with queue clearing and progress reporting
- Fix mobile camera support and UI layout
This commit is contained in:
2026-02-13 02:23:44 +01:00
parent f1f3f81466
commit 48def6c400
12 changed files with 1228 additions and 971 deletions

View File

@@ -7,6 +7,8 @@ const messages = {
'level.medium': 'ŚREDNI 10X10',
'level.hard': 'TRUDNY 15X15',
'level.custom': 'WŁASNY',
'level.custom_random': 'WŁASNY LOSOWY',
'level.custom_image': 'WŁASNY Z OBRAZU',
'level.guide': 'PODPOWIEDŹ ❓',
'actions.reset': 'RESET',
'actions.random': 'NOWA LOSOWA',
@@ -31,10 +33,29 @@ const messages = {
'custom.sizeError': 'Rozmiar musi być między 5 a 80!',
'custom.fillRate': 'Wypełnienie',
'custom.difficulty': 'Poziom trudności',
'image.title': 'IMPORTUJ OBRAZ',
'image.drop': 'Przeciągnij obraz tutaj',
'image.select': 'Wybierz plik',
'image.camera': 'Zrób zdjęcie',
'image.capture': 'Zrób zdjęcie',
'image.switch': 'Przełącz aparat',
'image.cameraError': 'Nie można uzyskać dostępu do kamery',
'image.change': 'Zmień obraz',
'image.size': 'Rozmiar siatki',
'image.threshold': 'Próg czerni',
'image.solvability': 'Rozwiązywalność',
'image.warning': 'Ten obraz może wymagać zgadywania!',
'image.difficulty': 'Trudność',
'image.calculating': 'Obliczanie...',
'image.calculatingSolvability': 'Obliczanie rozwiązywalności...',
'image.create': 'STWÓRZ NONOGRAM',
'difficulty.easy': 'Łatwy',
'difficulty.medium': 'Średni',
'difficulty.hard': 'Trudny',
'difficulty.harder': 'Trudniejszy',
'difficulty.hardest': 'Najtrudniejszy',
'difficulty.extreme': 'Ekstremalny',
'difficulty.unknown': 'Nieznany',
'win.title': 'GRATULACJE!',
'win.message': 'Rozwiązałeś zagadkę!',
'win.time': 'Czas:',
@@ -181,6 +202,8 @@ const messages = {
'level.medium': 'MEDIUM 10X10',
'level.hard': 'HARD 15X15',
'level.custom': 'CUSTOM',
'level.custom_random': 'CUSTOM RANDOM',
'level.custom_image': 'CUSTOM FROM IMAGE',
'level.guide': 'GUIDE ❓',
'actions.reset': 'RESET',
'actions.random': 'NEW RANDOM',