Commit Graph

26 Commits

Author SHA1 Message Date
creatixchu
6c0ce22f59 fix(directory-picker-browse): light the whole bar, and move the view once per keystroke
The hover affordance framed only the strip right of the crumbs. The bar itself
now carries the outline and the padding in both modes, so hovering previews
exactly the field the click produces and nothing resizes when the two swap.

One keystroke moved the view twice: deleting a separator first narrowed the
pane the draft had just walked away from, then replaced it with its landing.
The tail now filters only the LAST pane — the one whose level the path names —
so a pane on its way out holds still until its landing arrives.

Also from the review round: the walk waits both legs out instead of taking the
submitted-navigation bound (a speculative scan has nothing waiting on it, and
a tail keystroke aborting a slow parent leg would otherwise strand the
two-pane view); a level keeps answering the directory text that produced it,
so `..` segments and Windows forward slashes filter and stop rescanning; the
release-on-miss rule counts displayable rows, so it survives `hidden` ever
meaning more than dot-prefixed; and the editor's 250ms rest joins the other
two constants on the remote-recalibration list.
2026-08-03 13:45:30 +08:00
creatixchu
79072e356c fix(directory-picker-browse): advertise the path editor and walk the panes with the draft
The Select Workspace Directory dialog hid its one route into typing a path
behind an invisible click target, and once the editor opened the panes stayed
on whatever level was listed when it opened — so the typed text and the list
under it disagreed for the whole edit.

The edit zone now carries a pencil glyph at the bar's right edge and lights in
the editor's own footprint on hover/focus (the bar keeps one height across the
swap). While editing, the panes follow the draft: a directory part no pane
lists is scanned after a 250ms rest and lands in place, so typing deeper
descends and erasing segments steps back up without leaving the editor, and a
final segment nobody matches releases the prefix filter instead of emptying
the pane it is being spelled into. The draft-following scan is speculative and
silent on failure; Enter still owns the view from submission until landing and
remains the only path that surfaces an error.
2026-08-03 11:24:35 +08:00
creatixchu
e596d300d7 fix(directory-picker-browse): resolve quiet-navigation review 2026-07-30 15:22:28 +08:00
creatixchu
3ba25e25c0 fix(directory-picker-browse): bot round 1 — pill cascade+corner, slow-scan close reset, asymmetry+calibration recorded
- .loadingFloat moved after the .status/.error block (its padding was
  losing the same-specificity race) and re-anchored bottom-right: the
  truncated/error rows own the bottom left and keep rendering through a
  scan, so the pill can never cover them; confirmCreate's relist now
  clears the stale failure text like every other scan launch.
- The close edge resets loading, so the slow-scan effect disarms while
  hidden and a reopened dialog waits out a fresh silence window
  (regression test added).
- The truncated note's survival through a scan is now asserted in the
  slow-scan test; the wait-bound test moved to fake timers with the
  200ms bound explicit.
- select()'s exemption from the one-frame rule and the constants' local
  calibration premise are recorded in JSDoc and the capability-seam
  Agent Note; the themed-scrollbars note's rebinding enumeration is
  replaced by a pointer to the mechanical gate (it had drifted twice).
  Both pairs re-recorded.
2026-07-30 12:53:07 +08:00
creatixchu
6ee2752cca fix(directory-picker-browse): rebind the scrollbar elevation pair on the browser card
The loading pill's layer-2 background made the sheet an
elevated-surface painter, and the ui-theme scrollbar invariant rightly
flagged what was already latent: the dialog's columns scroll on an l2
card while the thumbs rendered in the base-surface pair. Rebind the
indirection on the card rule so it inherits to the scrolling columns.
2026-07-30 12:09:45 +08:00
creatixchu
7b22a3b454 feat(directory-picker-browse): quiet navigation — one-frame landings and a slow-scan loading pill
Navigations keep the previous view rendering while scanning: target and
parent legs land as one two-pane frame when the parent leg settles within
a 200ms wait bound (past it the target lands alone and the late leg
upgrades in place; Escape inside the landing window withdraws the
navigation). The loading indicator floats over the content on the card
background and appears only once a scan outlives a 300ms silence window,
so navigation never shifts the columns or flashes an intermediate frame.
The truncated note now describes the on-screen panes instead of hiding
during scans.
2026-07-30 11:50:16 +08:00
creatixchu
b46dcb16cb revert: restore the reviewer-approved tree (97a192d7b)
ZiyaZhang approved 97a192d7b; the subsequent bot-review rounds (7-24)
landed after that approval and were not requested by a human reviewer.
This commit restores the approved tree verbatim as a forward commit
(pushed history stays intact). git diff 97a192d7b is empty.
2026-07-30 09:22:16 +08:00
creatixchu
4921b63fe3 fix(host): review round 16 — UNC/forward-slash home forms; root-crumb separator; scrollbar symmetry; test dedup 2026-07-30 00:49:18 +08:00
creatixchu
abb3b62564 fix(host): review round 15 — lexical home normalization; webkit scrollbar hide; flex-none check; inert enumeration 2026-07-30 00:31:11 +08:00
creatixchu
413321e261 fix(host): review round 13 — probe never gates a landing; relist supersession covered, false ignores removed 2026-07-29 23:56:21 +08:00
creatixchu
1b89267d23 fix(host): review round 12 nits — two-stage create parking documented; CSS DOM order; busy-window caveat 2026-07-29 23:39:58 +08:00
creatixchu
eac3b378fa fix(host): review round 6 — progressive selection-anchored landing; anchor on actual parent entries; focus-flag hygiene 2026-07-29 21:34:30 +08:00
creatixchu
9c9c32ed59 fix(host): review round 4 — post-commit refocus covers right-pane picks; combobox semantics recorded as deferred 2026-07-29 15:26:00 +08:00
creatixchu
355d505b89 fix(host): review round 3 — card-scope escape/focus-leave cancel, pick refocus; record display-policy trade-offs 2026-07-29 15:10:35 +08:00
creatixchu
27053efffc fix(host): review round 2 — dialog-scoped blur cancel, editing-only focus hold, selection exempt from filters 2026-07-29 14:47:40 +08:00
creatixchu
998a5f3381 fix(host): review round — host-derived separator, click-safe blur cancel, dead wide prop 2026-07-29 14:27:01 +08:00
creatixchu
60383efef9 feat(host): blur cancels path editing; scrollbar clearance in the miller columns 2026-07-29 13:42:11 +08:00
creatixchu
c747f721ba feat(host): fixed-label show-hidden toggle; even divider clearance; 680x500 card 2026-07-29 13:29:17 +08:00
creatixchu
cdcdd2221e feat(host): show-hidden toggle in the directory browser footer 2026-07-29 12:52:59 +08:00
creatixchu
e89ae129d7 fix(host): wrap the dialog footer on narrow viewports
The confirm/cancel pair wraps onto its own row when the viewport-clamped
card is too narrow for the whole footer, so Open stays visible instead
of clipping past the card's hidden overflow.
2026-07-29 05:16:11 +08:00
creatixchu
1a9b84b19e fix(host): restart home on early-edit cancel; clamp the dialog to short viewports
Escape canceling a path edit opened before any level listed relaunches
the home listing instead of stranding a blank picker (the editor had
superseded the initial request while parent was still null). The card's
height clamps to the viewport (min(420px, 100dvh - 32px)); header and
footer are flex-none and the columns scroll, so Open/Cancel stay
reachable on landscape phones and short embedded windows.
2026-07-29 04:46:49 +08:00
creatixchu
7b80b8ce60 fix(host): keep the child pane reachable on narrow viewports; surface truncated levels
The Miller row now scrolls horizontally with the child pane pinned into
view when its preview lands, so descent stays reachable when the dialog
is narrower than two fixed panes. The dialog also says when a visible
level was cut at the backend's complete-result bound (817's maxEntries)
instead of letting the tail of a huge directory go silently missing.
2026-07-29 03:53:48 +08:00
creatixchu
f8cd2bf749 fix(host): review round 5 — draft-pending action gating, in-flow errors, IME guards
- Open and New folder disable while a path draft is uncommitted: targetPath
  still names the previous selection/listing, and committing against it
  while a different path shows in the header adopts the wrong directory.
- The Miller columns keep their own row so a status/error line renders below
  them inside the card instead of competing as a third flex item the dialog
  clips off-screen.
- Both text inputs (path editor, folder name) carry the IME composition
  guard the workspace-name inputs already had: a composing Enter confirms
  the candidate, never submits.
2026-07-29 00:15:30 +08:00
creatixchu
af049cceaf fix(host): native button semantics for rows; path editor inert under the create dialog
Rows keep their NATIVE button role inside a listitem seat (role overrides
exposed selectable folders as passive list items to assistive technology),
the crumb trail becomes a navigation landmark, and the path-edit input joins
the parentInert derivation so the nested create dialog cannot be undercut
through it.
2026-07-28 23:50:05 +08:00
creatixchu
6cd63f741c fix(host): address review — Escape scoping, relist gating, crumb overflow, aria golden
- Escape (and the mask) now reaches only the topmost dialog: while the
  nested New-folder dialog is up the browser ignores its own Modal close,
  and the nested dialog's in-flight fence keeps both open during creation.
- New folder disables while any listing loads, so a slow post-create
  relist/select sequence cannot host a second create against a target the
  pending listing is about to change.
- Deep ancestry scrolls inside a dedicated crumb trail whose tail is pinned
  into view; the path-edit zone keeps its reserved width instead of being
  clipped by the card, preserving cross-drive path entry.
- The workspace-management e2e records a directory-browser aria golden at a
  staged tree (host HOME pointed at the scaffold cwd collapses ancestry into
  the Home crumb, keeping the artifact machine-independent), and the keyless
  snapshot's row targeting goes through visible label text — listitem
  accessible-name computation differs across dom-accessibility-api
  environments (the CI-only miss).
2026-07-28 23:21:27 +08:00
creatixchu
4822622cb7 feat(host,client): ship the in-app directory browser as the browse package's client half
directory-picker-browse becomes dual-face: its browser half fills
ui-workspace's two directory-flow holes with the Select Workspace Directory
dialog (figma Harness 813-23126 family — Miller two-column view, breadcrumb
with click-to-edit path zone, nested New-folder dialog), driving the node
half's host.listDirectory/host.createDirectory and owning its locale
namespace (directory-browser, zh default / en). The dialog moves here from
ui-workspace wholesale — the trigger surfaces keep only the flow-hole owner
conversation.

apps/cli flips its one directory-picker row -native -> -browse, swapping the
host backend and the client interaction together; picking now works for
remote deployments out of the box. The keyless workspace-flow snapshot boots
the browse bundle and drives menu -> dialog -> Documents -> project -> Open
against the fixture tree.
2026-07-28 22:22:14 +08:00