Post-React-migration regressions: spawn submit button moved to modal footer, sidebar footer restored (help/theme/palette/status/spawn), session card stripped of redundant Tailwind, action buttons use proper leaf-act/leaf-actions CSS structure for hover-only visibility. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
67 lines
3.1 KiB
TypeScript
67 lines
3.1 KiB
TypeScript
// Document-level events the shell listens for. They were declared alongside
|
|
// the vanilla views that dispatched them (catalog.ts, drawer.ts) until #253
|
|
// deleted those; the React components on both ends share them from here.
|
|
//
|
|
// Every one is dispatched on `document`, so a view deep in the tree can reach
|
|
// the shell without a callback threaded through every level between.
|
|
|
|
/** Ask the shell to open the spawn modal. Dispatched from every Spawn
|
|
* affordance; handled by App.tsx, which owns the modal. */
|
|
export const OPEN_SPAWN_EVENT = "catalog-open-spawn";
|
|
|
|
export function requestOpenSpawn(): void {
|
|
document.dispatchEvent(new CustomEvent(OPEN_SPAWN_EVENT));
|
|
}
|
|
|
|
/** Ask the shell to open the command bar with an empty query. Dispatched by
|
|
* the sidebar's search field, which is the touch entry point to the bar
|
|
* (#157, docs/COMMAND-BAR.md "Touch entry"): there is no `ctrl-k` on a phone. */
|
|
export const OPEN_COMMAND_BAR_EVENT = "catalog-open-command-bar";
|
|
|
|
export function requestOpenCommandBar(): void {
|
|
document.dispatchEvent(new CustomEvent(OPEN_COMMAND_BAR_EVENT));
|
|
}
|
|
|
|
/** Ask the shell to hand the keyboard back to the focused pane's terminal —
|
|
* what Tab in the sidebar list does. */
|
|
export const FOCUS_PANE_EVENT = "catalog-focus-pane";
|
|
|
|
/** Ask the shell to open the spawn modal seeded from an existing session
|
|
* ("Spawn similar"). Detail is the session being cloned. */
|
|
export const SPAWN_SIMILAR_EVENT = "catalog-spawn-similar";
|
|
|
|
/** Ask the sidebar to kill a session — the command bar's action page picking
|
|
* `kill` (#151). Detail is the session. Handled by the sidebar, so the kill
|
|
* goes through the same confirm-and-blockers flow the card's ✕ does
|
|
* (`docs/WORKTREES.md`); the bar never reimplements it. */
|
|
export const KILL_SESSION_EVENT = "catalog-kill-session";
|
|
|
|
/** Ask the sidebar to rename a session — the command bar's action page picking
|
|
* `rename` (#151). Detail is the session. The prompt is the card's own inline
|
|
* field, pre-filled with the session's name (`docs/SIDEBAR.md`). */
|
|
export const RENAME_SESSION_EVENT = "catalog-rename-session";
|
|
|
|
/** A session row was clicked (issue #133). The row's `href` drives normal
|
|
* hash navigation, but a split/drag can move focus without ever touching
|
|
* `location.hash` — so a click back onto a session whose hash still
|
|
* matches fires no `hashchange` and the app never hears about it. This
|
|
* event is the click-driven path that doesn't depend on the hash actually
|
|
* changing. */
|
|
export const SESSION_SELECT_EVENT = "catalog-session-select";
|
|
|
|
/** Toggling the mobile drawer from outside the shell (the pane header's ☰),
|
|
* without threading the controller through every view. */
|
|
export const TOGGLE_DRAWER_EVENT = "maestro-toggle-drawer";
|
|
|
|
export function requestToggleDrawer(): void {
|
|
document.dispatchEvent(new CustomEvent(TOGGLE_DRAWER_EVENT));
|
|
}
|
|
|
|
/** Toggle the help overlay from a button click (the `?` key is handled by
|
|
* HelpOverlay's own command set). */
|
|
export const TOGGLE_HELP_EVENT = "maestro-toggle-help";
|
|
|
|
export function requestToggleHelp(): void {
|
|
document.dispatchEvent(new CustomEvent(TOGGLE_HELP_EVENT));
|
|
}
|