Commit graph

2 commits

Author SHA1 Message Date
c718334d25 fix(browse,classifier): backdrop dismiss no longer fires on a drag out of an input
Selecting text in a dialog input by click-dragging and releasing the mouse
outside the dialog closed it: the browser fires a `click` whose target is the
backdrop (mousedown was inside, mouseup outside), and the dismiss handler keyed
solely on `e.target === backdrop`.

Guard every backdrop click-to-close with a mousedown flag — close only when the
press ALSO started on the backdrop (a genuine backdrop click), not a drag that
began inside the dialog. Applied to the browse New file/folder party picker (the
reported case) and the other browse create dialogs (create/accept-transmittal,
stage), plus the classifier dialogs that share the pattern (copy chooser,
dir-picker, and the paste/match modal — whose textarea is a prime drag target).
The conflict/history dialogs already used mousedown and were unaffected.

Build + browse/classify/classifier suites green (80).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 10:36:07 -05:00
93ed0d361f feat(classifier): "By existing" tab + multi-select directory picker
Reshape the catalog from a button+overlay into a proper tab and let the user
choose which directories feed it.

- Tabs: the Catalog button becomes a third tab "By existing", grouped with "By
  tracking number" (both assign a tracking number) and visually separated from
  "By transmittal" (which assigns the path). A brief goal line above the tabs
  states the workflow. The overlay #mdlPanel becomes a normal in-flow tab panel.
- Load: instead of auto-scanning a whole project, "Load…" opens a lazy,
  multi-select (checkbox) directory tree (new classifier/js/dir-picker.js).
  Ticking a directory includes its whole subtree; confirm resolves the topmost
  ticked handles. Scope follows where the classifier is served: /_apps/… → all
  accessible projects, under <project>/… → that one project, file:// → a picked
  folder. The picker is handle-agnostic (HttpDirectoryHandle or native FS).
- Rows: every ticked directory is walked recursively into the union of existing
  files (zddc.parseFilename) and MDL deliverables (mdl/*.yaml → inMdl + title),
  deduped to one row per tracking number. The "Archive revs" (all) column
  becomes a single informational "Latest rev" computed via zddc.compareRevisions.
  Drop still assigns the tracking number only; the Revision cell stays blank.
- classify.js is unchanged — the mdl axis model and row shape are reused as-is
  (Latest rev derives from the preserved archiveRevisions).
- Tests: the catalog test now asserts latest-rev; new unit tests cover
  walkDirInto union/dedupe-to-latest, _latestRevOf draft/modifier ordering,
  _detectScope routing, and the dir-picker topmost-ticked resolution. 61 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 19:39:55 -05:00