Custom actions
static resourceActions(actions: ActionBuilder) { actions.row('escalate', 'Escalate').color('accent').icon('arrow-up') actions.header('export', 'Export CSV') return actions}
static override async handleAction(name, ctx) { if (name === 'escalate') { // mutate record, flash message return { redirect: ctx.backUrl } }}Playground: Tickets — Escalate / Mark resolved (with bell notifications), Export CSV, and Test notification header action; API keys — revoke/reactivate.
Return { notification: true } (or { notification: { title, body } }) from handleAction to push to the signed-in user’s topbar bell.
Pages use headerActions() and handleAction() with the same action builder API.