Open
Conversation
added 26 commits
January 4, 2026 11:56
- Add ImageWaveform module with canvas-based RGB/Luma/channel rendering - Update WaveformData type for separate channel arrays - Add mock waveform generation to PreviewBloc - Create MetadataBloc for EXIF parsing and GPS extraction - Create MetadataPanel with GPS map and collapsible sections - Create ExportBloc for export settings and progress state - Create ExportPanel with format, resize, metadata, color space options - Update PanelSwitcher to route Metadata and Export tabs - Register new modules in registry Progress: 71% complete (62/87 tasks)
- CropBloc: aspect ratio presets, rotation, flip, straighten - CropPanel: aspect ratio grid, rotation slider, transform tools - MasksBloc: mask containers, sub-masks (brush/gradient/radial/luminosity/color/AI) - MasksPanel: mask creation, editing view, per-mask adjustments - PresetsBloc: folder/preset tree, import/export, preview URLs - PresetsPanel: folder tree, preset thumbnails, inline forms - AIBloc: AI patches, ComfyUI status, generative fill state - AIPanel: connection status, tool grid, brush settings, prompt input - Updated registry and PanelSwitcher to enable all panel tabs Phase 4 now 75% complete (12/16 tasks), overall ~80% complete
Add ModalBloc for modal visibility registry with typed data and confirm() API. Add Modal primitive with ConfirmModal and InputModal variants. Add RatingControl, ColorLabelPicker, and TagEditor metadata widgets. Update progress to 85% complete (74/87 tasks).
- KeyboardService: centralized shortcuts with modifiers and categories - ContextMenuService + ContextMenu: nested submenus, portal rendering - ClipboardService: copy/paste adjustments by category - FullscreenViewer: fullscreen image viewing with auto-hide UI - ErrorMessage: error/warning/info variants with retry/dismiss - CommunityBloc + CommunityView: preset browsing with search/filter - KeyboardShortcutsModal, AboutModal, ExportProgressModal Progress: ~95% complete (83/87 tasks)
- Add @tanstack/react-virtual for list virtualization - Virtualize GalleryGrid with dynamic column count and row-based rendering - Virtualize Filmstrip with horizontal scrolling - Virtualize CommunityView grid and list modes - Configure useFlushSync: false for React 19 compatibility - Add LRU cache utility with eviction callbacks for blob URL cleanup - Update ThumbnailBloc to use LRU cache (500 item limit) - Update PreviewBloc with blob URL revocation on clear/change - Add unit tests for SelectionBloc, HistoryBloc, AdjustmentsBloc, LRUCache Phase 5 progress: 11/13 complete (~98%)
- Implement BottomBar component with star rating, copy/paste adjustments, and view-specific controls - Add LibraryExportPanel with format selection, resize options, and metadata controls - Create Switch primitive component for boolean settings - Update layout configs with proper pixel-based sizing from legacy values - Refine WelcomeScreen with splash images and settings panel - Update primitives (Button, Dropdown, Input, Modal, Slider, CollapsibleSection) for consistency
…hortcuts - Add ModalRenderer to centrally render all modals from ModalBloc state - Integrate TitleBar with macOS traffic light support - Wire up ContextMenuProvider for global right-click menus - Initialize KeyboardService with useGlobalShortcuts hook (Cmd+1/2/3, Cmd+/) - Create barrel exports for blocs, hooks, utils, and services - Fix Button (add secondary variant), Input (add icon props), Dropdown (generic types) - Complete feature parity with 48/48 components implemented
- Replace custom Button with React Aria Button for accessibility - Use tailwind-variants for variant management - Add pressed state via data-[pressed]: selectors - Add focus ring via focusRing utility - Maintain backward compatibility: onClick, disabled, title props still work - Add react-aria-components and tailwind-variants dependencies
- Modal: use React Aria Dialog/ModalOverlay with animations - Switch: use React Aria Switch with tailwind-variants - Input: use React Aria Input with focusRing utility - CollapsibleSection: use React Aria Disclosure with MutationObserver for height animation All components preserve existing APIs for backward compatibility.
- Create Tooltip primitive using React Aria (200ms delay, animations) - Update Switch to use Tooltip instead of native title attribute - Refactor ContextMenu UI with React Aria Menu components - Full keyboard navigation (arrows, Home/End, typeahead) - Auto-focus first item, proper ARIA roles - Keep ContextMenuService BLoC for state management - Document decision to keep Slider as custom implementation - Phase 3 complete, Phase 4 in progress
- Add tailwind-merge dependency (required by tailwind-variants for build) - ColorWheel evaluation: keep custom (already SVG implementation) - Build validated: 584.97 kB (179.27 kB gzip) - Bundle increase ~70 kB gzip for accessibility benefits - All phases complete (98%), ready for manual testing
- Remove @uiw/react-color-wheel and @uiw/color-convert (only used in legacy) - Add aria-label and aria-valuetext to Slider for screen reader support - Screen readers now announce 'Exposure: 1.5' instead of just '1.5'
Document all dependencies with usage analysis: - 17 active dependencies to keep - 14 unused/legacy dependencies that can be removed - Includes removal instructions and alternatives considered
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.