F-20 workbench chrome: team mode, the modal focus trap, the ⌘K palette, upload / notes / mic, layout density, and column resizers. Team modals go through openModalEl / closeModalEl (the old IIFEs bypassed the trap). Palette Artifact hits follow M-03 (session first, then exact version_id).
| File | Responsibility |
|---|---|
api.ts |
Same-origin JSON helper (/api/v1, ApiError). |
chrome.css |
Lane styles for palette / notes / team / resizer class names. |
dom.ts |
$ / el / icon / ago / hint / grow. icon draws from the shared icons/paths.ts table. |
host.ts |
isReady window-capability lookups. Does not import window-exports. |
index.ts |
bootChrome(): window assignments, keydown, binds, bootTeam. |
layout.test.ts |
os-layout persistence, compact/wide classes, column-width clamp. |
layout.ts |
applyLayout / setLayout. Key os-layout. |
mic.ts |
SpeechRecognition dictation onto #composer. |
modal.test.ts |
Trap stack, Tab cycle, Esc, focus restore, team fallback selectors. |
modal.ts |
Verbatim focus trap (stack / Tab / Esc / restore). |
notes.ts |
Project notes in the Files dock. |
palette.test.ts |
M-03 Artifact hit, stub-safe isReady, out-of-order PAL.gen. |
palette.ts |
⌘K palette. Artifact hits open session then exact version. |
resizer.ts |
Sidebar / dock column drag. Keys os-side-w / os-dock-w. The handle's tooltip is a static data-i18n-title label, repainted when the dictionaries load and on a language switch. |
resizer.i18n.test.ts |
The resizer tooltip is never the bare key resizer.drag, and follows the dictionary load and a language switch. |
team.test.ts |
Identity chip, admin panel, guest redirect, trap on team modals. |
team.ts |
Team IIFEs. /auth/me probe; admin/files modals use the trap. |
upload.test.ts |
Selection-time destination, the four-clause batch match, single flight, retry supersession, 64-failure bound. |
upload.ts |
File input / paste / drop uploads, UPLOAD_STATE, the first-session single flight, and the send barrier's waitForPendingUploads. |