990ead93b95c4c82993f5ca645161dbab65cf163
audit m5. the active file is `?file=`, tree file rows and tabs are links, and a `?file=` naming something that is not open now opens it — which is the part that makes a pasted link actually work rather than just describe. the open-tab *set* stays local state and i want that on the record as a choice, not an omission. it is a working session, not an address: it grows without bound, every entry costs a read on load, and nobody has ever linked someone else to a tab bar. opt-in via a prop from the screen rather than the workspace identity the file browser uses, because /code-editor renders CodeEditorView directly inside a Widget instead of through the panel wrapper — there is no workspace to ask. a dashboard editor is unchanged. tree *folder* rows stay buttons, and unlike the file browser's folders this needs nobody's call: expanding a directory is disclosure, not navigation. two things fixed while in here. the tab close control was a role="button" span nested inside the tab's own button — invalid before, and a nested interactive inside an anchor after — so it is a sibling button with an aria-label now. and closeFile picked the next-active file inside a setFiles updater, which is the impurity react double-invokes in development to catch. a path that fails to read is remembered, so a broken link errors once instead of once per render, and the address is left alone rather than rewritten.
Description
No description provided
42 MiB
Languages
TypeScript
90.9%
Shell
4.7%
JavaScript
4.1%
CSS
0.2%
HTML
0.1%