import Router from "@koa/router"; import { Context } from "koa"; import { FlatTemplatable } from "tempstream"; import { FormMessage, FormData } from "../form-types.js"; import type { Form } from "../form.js"; export type FieldMessages = Record< Fieldnames, { type: "error" | "info"; message: string } >; export class FormControlContext { constructor( public ctx: Context, public data: FormData, public messages: FormMessage[], public field_name_prefix: string, public form_id: string, public validate: boolean ) {} } export abstract class FormControl { abstract render( fctx: FormControlContext ): FlatTemplatable | Promise; abstract role: "input" | "decoration" | "messages" | "submit"; // eslint-disable-next-line @typescript-eslint/no-explicit-any mount(_router: Router, _form: Form) {} }