/** One credited line — a person, a studio, an asset pack, a tool. */ export interface CreditsEntry { /** Who or what is credited. */ label: string; /** Free-string qualifier shown beside the label — a role, a license, a pack title. */ detail?: string; /** Where the work came from. Never fetched; the view decides whether to link it. */ href?: string; } /** A titled group of entries — "Design", "Music", "3D Assets". */ export interface CreditsSection { heading: string; entries: readonly CreditsEntry[]; } /** Everything a credits screen shows. `notice` is the closing line (a license summary, a thank-you). */ export interface CreditsDocument { title?: string; sections: readonly CreditsSection[]; notice?: string; } /** * Merges credit documents into one, concatenating same-heading sections in first-seen order and * dropping exact duplicate entries. Use it to fold generated credits (asset packs, dependencies) * into the game's hand-authored ones without curating the overlap by hand. * * @capability merge-credits fold generated and hand-authored credit documents into one, deduped by entry */ export declare function mergeCredits(...documents: readonly (CreditsDocument | null | undefined)[]): CreditsDocument; /** * Groups entries into sections by a caller-supplied key — the shape most generated credits arrive * in (a flat list of things used, grouped by license, provider, or role). Section order follows * first appearance, so a stable input gives a stable screen. * * @capability group-credits turn a flat list of credited things into ordered credit sections */ export declare function groupCredits(items: readonly T[], heading: (item: T) => string, entry: (item: T) => CreditsEntry): CreditsSection[];