Floating toolbar: make dragging predictable and keep Position as a secondary fallback
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 42/100
Direzione di ricerca
Start in Sources/LocalVoice/CapturePanel.swift (drag snap to eight anchors) and Sources/LocalVoice/FloatingToolbar.swift (Position submenu). Implement free placement after a 4-point drag threshold, 16-point dock snap with a guide, bounds clamping, and replace the eight-item submenu with a compact Position control; persist per existing owner. Done when the listed acceptance checks pass for drag vs click, snap vs free release, collapse/reveal, keyboard placement, and relaunch.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Outcome and evidence
P3, user-requested usability refinement, source-confirmed current behaviour. The toolbar offers dragging and an eight-item Position submenu. The user wants direct movement to be natural, with less menu clutter.
Workbench Preview 2.3.0, build 20260928054038, source 00be555139f87d4557f48fcffc132b8621c251a2, unmodified source, macOS 26.5.1 (25F80), Apple M5, built-in display. Identity verified in the running app using Copy build details on 28 September 2026.
The full toolbar drag/anchor matrix was not run in this audit. Do not describe free placement as an existing broken feature.
Current owner
Source links below pin the earlier audited commit 9578d8cf; the relevant paths were checked against installed 00be5551 and the described behaviour is unchanged. Source findings and native observations are distinguished below.
CapturePanel.swift snaps every completed drag to the nearest of eight anchors. FloatingToolbar.swift exposes those anchors in Position. The row supports dragging from glyph/primary/divider, while mode chips and Prompts retain click behaviour.
Decision
Use free placement by default. A drag beginning on the glyph, primary control or empty chrome moves the toolbar after a 4-point movement threshold; a click below that threshold keeps its existing action. Mode chips and the prompt picker remain ordinary controls.
Snap only when the pointer releases within 16 logical points of an available dock target, with a visible guide while that target is active. Releasing elsewhere preserves the chosen free position. Clamp the toolbar inside the available display bounds and expand inward near edges.
Replace the eight-anchor submenu in the mode menu with one Position… command opening a compact keyboard-accessible placement control. It offers the existing named anchors and a reset to a visible default. This retains precision/accessibility without a cascading menu tree. Update Grammar/surface registry and the owning placement contract as part of this bounded behaviour change.
Persist position per existing owner. Keep later manual placement through collapse/reveal, relaunch and display removal. Reuse consistent drag threshold, snapping and off-screen recovery semantics for Persona where appropriate while retaining independent per-copy state. Persona edge resizing belongs to #157; the toolbar sizes to its content.
Acceptance
- Drag from the intended chrome without firing its click action; clearly distinguish moving from mode selection.
- Release beyond the 16-point dock zone and retain the chosen free position; within it, show the guide and snap to that target. Movement below 4 points remains a click.
- Expanding/collapsing preserves expected placement and pointer targets.
- Keyboard position choices and off-screen recovery remain available.
- Relaunch and available display changes preserve later manual choices; record unavailable multi-display tests.
- Geometry correction is verified first, so clipping does not distort the placement test.
Related: #134. Closed #84 consolidated Position presentation while preserving eight-anchor behaviour; this request concerns the user experience, not repeating that refactor.
- Lingua principale
- Swift
- Stelle
- 0
- Fork
- 1
- Merge medio
- 8h 16m
- PR unite (30g)
- 210
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Ship-Work/workbench
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
documentation good first issue help wanted
Difficoltà 2/5 Mezza giornata Idoneità per principianti 74/100
Ship-Work/workbench#29 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 12/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Ship-Work/workbench
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
[BUG] File transcription skips audio chunks shorter than one secondForse già presa @sabbah13 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
altic-dev/FluidVoice#1161 ·
I maintainer di solito rispondono entro 1 giorno
-
swift.md: `Date(myString, strategy: .iso8601)` example omits `try` — the initializer is throwingAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
-
core: RAC_LLM_OPTIONS_DEFAULT.min_p disagrees with the IDL's annotated defaultForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug core p3
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
RunanywhereAI/runanywhere-sdks#1083 ·
I maintainer di solito rispondono entro 5 giorni
-
bug/fix needs: triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
capawesome-team/capacitor-firebase#1054 ·
I maintainer di solito rispondono entro 1 giorno