Two dashboard tile CSS issues reported after resizing tiles in the
GridStack-based dashboard:
1. Shrinking the Progress tile's height clipped the lower content
(time grid, filename, buttons) out of the visible area instead of
making it scale or scroll - #card-progress had no flex layout, so
its fixed-size children just overflowed silently under the generic
overflow:auto rule. Applied the same display:flex;flex-direction:
column pattern already used for #card-camera, with flex-shrink:0
on the direct children so the container can properly scroll instead
of hiding content off-screen.
2. Tiles could show a scrollbar even with nothing to scroll, from
sub-pixel horizontal overflow under the blanket
overflow-y:auto/overflow-x:hidden rule (was overflow:auto covering
both axes) - split it so only vertical scroll is offered, which is
the only axis dashboard content actually needs.
Verified visually via Playwright: resizing the progress tile to
h=2/h=4 no longer clips content, and a fan-card resize with
scrollHeight==clientHeight now shows no scrollbar.
Replace the fixed dashboard layout with a fully customizable GridStack.js
grid (12-col snap grid, vendored + inlined so it also works in OrcaSlicer's
embedded webview). Cards can be dragged, resized, hidden and rearranged;
layout persists per browser. Includes two built-in presets (Standard,
Wide desktop per the original Issue #89 proposal) plus the ability to
save/apply/delete named custom presets.
fix(camera): stream freeze after ~15-30min from non-monotonic FLV
timestamps — ffmpeg's realtime pacing stalls on PTS jumps in the printer's
stream. Fixed with -use_wallclock_as_timestamps on both ffmpeg call sites
(CameraCache._input_args, _run_h264_loop). Issue #90.
test: fix tests/conftest.py referencing a stale bridge/ subfolder path and
missing args.data_dir (pre-existing breakage, unrelated to this feature);
rewrite the two test_settings.py cases that still mocked the removed
_find_env_path from the old .env-based settings storage.
- Slot color editor: Pickr HSV color picker (offline, served from lib/),
recent swatches (up to 16, localStorage), copy color from other slot
- Unified axes control panel: XY+Z merged, shared step size + custom mm input
- Language selector moved from header to Settings → Appearance
- Filament mismatch detection blocks Upload-and-Print on material mismatch,
slot mapper opens automatically
- Spoolman spool-per-slot assignment in AMS status tab and Filaments settings
- Fix: Spoolman sync rate label — 0=end of print, not disabled (Issue #76)
- Fix: lib/ assets served by bridge static handler for offline use
- UI: global unified select + input styling, set-row labels match modal-field