Commit Graph
2 Commits
Author SHA1 Message Date
Zeus-Deus 853c9435cd Model picker: search + recent + favorites for large catalogs
Replace the flat dump of every model in the chat-input picker with a
quick-switch. Opening the picker now shows a search box, an auto-tracked
Recent list (last 5 picks), and a manual Favorites list instead of every
available model crammed into a 280px dropdown. With large catalogs
(e.g. OpenRouter's 350+ models) this was unusable as both a quick-switch
and a browser.

- Recent: each pick is recorded most-recent-first (capped at 5) under a
  new odysseus-model-recent key, so the next open has it one click away.
- Favorites: an inline star on every row toggles favorite state and
  writes the existing odysseus-model-favorites key, so the sidebar Models
  section stays in sync. The star toggles only — it never picks the model.
- Search filters a flat list across the whole catalog; favorited rows
  keep their filled star while filtered.
- Small catalogs (<=12 models) still list everything in browse mode so
  tiny installs aren't forced to search for a model.
- Touch friendly: stars are always visible (no hover-reveal) and tap
  targets grow on narrow screens.

No changes to sidebar visibility defaults.

Closes #399
2026-06-01 20:39:34 +02:00
Zeus-Deus 6a043c543e Make tool windows resizable by dragging edges or corners
Library, Notes, and the other floating tool windows (Tasks, Calendar,
Gallery, Email, Cookbook, Brain, Settings, Theme, Compare, Research,
Sessions) could be moved and snapped but never resized — there were no
resize handles and dragging the edges did nothing.

Add a shared makeWindowResizable() helper and wire it into the existing
makeWindowDraggable() so every draggable window gains native-style
edge/corner resizing from one place:

- Grab any of the four edges or four corners to resize; the cursor
  reflects the active handle (ew/ns/nwse/nesw-resize).
- Detects pointer proximity to the border instead of injecting handle
  elements, so it works regardless of each window's overflow model
  (.modal-content scrolls its body; .notes-pane scrolls an inner el).
- Min-size clamp (320x200) and viewport clamping so a window can't be
  collapsed to nothing or dragged off-screen.
- Per-window size is remembered and restored on reopen.
- Disabled on mobile (windows are full-screen sheets there) and while a
  window is docked or fullscreen-snapped.
- Touch supported at tablet width and up; self-heals a missed pointer-up
  so a lost mouseup can't leave a window stuck in resize mode.
2026-06-01 19:49:23 +02:00