P2: file operations with dialogs (mkdir, new file, rename, delete, chmod)

- prompt/confirm/chmod dialogs (signals-driven via DialogsService)
- FileActionsService: acts on selection or cursor row of the active panel
- function bar + F2/F7/F8/Delete keys; delete confirms and recurses
- verified provider ops + walkTree + removeRecursive on a scratch tree

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jokin
2026-07-11 13:38:40 +02:00
co-authored by Claude Fable 5
parent a150c5ee2e
commit b907e0a4ce
10 changed files with 519 additions and 2 deletions
+6
View File
@@ -149,6 +149,8 @@ export class PanelsService {
readonly left: PanelState;
readonly right: PanelState;
readonly activeSide = signal<Side>('left');
/** Bumped to tell the active panel to grab keyboard focus again (e.g. after a dialog closes). */
readonly focusTick = signal(0);
constructor(rpc: RpcService, toast: ToastService) {
const deps = { rpc, toast };
@@ -175,4 +177,8 @@ export class PanelsService {
other(side: Side): PanelState {
return this.get(this.otherSide(side));
}
refocus(): void {
this.focusTick.update((n) => n + 1);
}
}