- resizable sidebar/preview panes using react-resizable-panels (% units)
- canvas ResizeObserver: renderer + camera aspect update on panel resize
- global drag-and-drop: multi-file support, mixed/unsupported type toasting
- toast z-index raised above modal overlay
- remove file triggers preview reload when switching to single-file layout
- min-h-48 on 3D/splat canvas containers and canvas elements for correct initial sizing
- loadPreviewOnCanvas now returns camera alongside renderer
- FileUploader standardised to File[] with multiple prop
- Per-file sidebar: idle X → uploading spinner → success ✓ → error ! with hover retry
- Carousel preview with left/right navigation
- Parallel batch uploads via Promise.all with live per-file status
- Single-file path preserves existing spinner UX
- Partial failure: Retry Failed button re-uploads only errored files
- Thumbnails keyed by File reference (not index) so removals don't corrupt the map
- FileList normalised via Array.from to fix file-picker multi-select
- Catch block in batch utilities only marks uncompleted files as error
- grouped fail message with fail reason under one tooltip for cleaner ui
- prompt / copy prompt for every type of task card
- larger thumbnails, wider task queue dropdown
- removed prompt hover on card thumbnails
- marquee css updated
- other styling cleanups
- Copy button on failed task cards copies the prompt to clipboard with a
3s check/green feedback
- Prompt preview row with marquee scroll on hover (only when text
overflows), tooltip showing full prompt up to 300 chars
- Fix dismiss and action button icon centering across all card types
(InProgress, Completed, Failed)
- Add marquee keyframe animation to tailwind.config.ts
PageEdit was never rendered in the app. Removes all PageEdit files
(~4000 lines) and migrates the shared types (BaseSelectorImage,
ImageBundle) and HistoryStack component to @storyteller/ui-pagedraw
which already owns the canonical definitions.