import type { EntrySubrouteKind, SubroutePayload } from './fold';
/**
 * Per-kind domain metadata used to describe a subroute in a render-agnostic way.
 *
 * Notice copy, breadcrumb labels, SEO titles, dashboard "what am I looking at"
 * badges — all read from this single source of truth so domain nouns,
 * display-name formatting, and editor URLs don't drift across consumers.
 */
export type SubrouteKindMeta<K extends EntrySubrouteKind> = {
    kind: K;
    /** The parent thing — "event", "course". */
    containerNoun: string;
    /** The instance thing — "date", "run", "session". */
    instanceNoun: string;
    /** Plural list noun the dashboard groups them under — "events list", "courses list". */
    listLabel: string;
    /** Human-friendly name for this instance, or null when none is available. */
    formatInstanceName: (payload: SubroutePayload<K>) => string | null;
    /** Dashboard sub-path (relative) for editing the instance. */
    subEditorPath: (payload: SubroutePayload<K>) => string;
};
type SubrouteKindRegistry = {
    [K in EntrySubrouteKind]: SubrouteKindMeta<K>;
};
/**
 * The single source of truth for per-kind subroute metadata.
 *
 * Adding a new {@link EntrySubrouteKind} requires a new entry here; the
 * `Record<EntrySubrouteKind, …>` shape will refuse to compile otherwise.
 */
export declare const SUBROUTE_KINDS: SubrouteKindRegistry;
export {};
