# types/event.types.ts

> 37 lines of code and 10 definitions.

Tree: Site tree
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/tree#file-types-event-types-ts
Source text: https://banes-lab.com/assets/sources/source.875dc683730ea00248fdda9913860f4c6b5f2a3b0a45eaf56788b8f74d01eda7.generated.txt

## Definitions

- `RouteRequestedEvent` (interface_declaration, line 1, exported)
- `RouteChangedEvent` (interface_declaration, line 7, exported)
- `OverlayRequestedEvent` (interface_declaration, line 12, exported)
- `OverlayDismissedEvent` (interface_declaration, line 18, exported)
- `TabSelectedEvent` (interface_declaration, line 22, exported)
- `NodeRequestedEvent` (interface_declaration, line 28, exported)
- `AppEvent` (type_alias_declaration, line 34, exported)
- `EventName` (type_alias_declaration, line 42, exported)
- `EventOf` (type_alias_declaration, line 44, exported)
- `EventListener` (type_alias_declaration, line 46, exported)

## Source

```typescript
export interface RouteRequestedEvent {
    readonly name: "route.requested";
    readonly page: string;
    readonly path?: string;
}

export interface RouteChangedEvent {
    readonly name: "route.changed";
    readonly page: string;
}

export interface OverlayRequestedEvent {
    readonly content: Element;
    readonly name: "overlay.requested";
    readonly title: string;
}

export interface OverlayDismissedEvent {
    readonly name: "overlay.dismissed";
}

export interface TabSelectedEvent {
    readonly name: "tab.selected";
    readonly page: string;
    readonly tab: string;
}

export interface NodeRequestedEvent {
    readonly id: string;
    readonly line: number | null;
    readonly name: "node.requested";
}

export type AppEvent =
    | NodeRequestedEvent
    | OverlayDismissedEvent
    | OverlayRequestedEvent
    | RouteChangedEvent
    | RouteRequestedEvent
    | TabSelectedEvent;

export type EventName = AppEvent["name"];

export type EventOf<N extends EventName> = Extract<AppEvent, { readonly name: N }>;

export type EventListener<T extends AppEvent = AppEvent> = (event: T) => void;
```
