/**
 * Content Ref Group Configuration
 *
 * Single source of truth for grouping content_refs by type. Used by both:
 *  - components/related-content (detail page rail — lives in this lib)
 *  - the hub's lib/utils/investor-email-utils.ts (email builder, via the
 *    hub's re-export shim at lib/config/content-ref-groups.ts)
 *
 * Lives in utils/ (server-safe tsup block) so hub server-side code can
 * import it.
 *
 * Each entry carries the metadata RelatedContentSection needs to render the
 * group WITHOUT re-implementing per-type logic locally:
 *   - `label`: section heading.
 *   - `order`: source-stable ordering (lowest first).
 *   - `layout`: 'list' (one-per-row, full-width cards) or 'grid' (responsive
 *     column grid).
 *   - `gridSize`: card-size variant passed to the per-type card dispatch.
 *     `'lg'` matches the canonical large-card variant openframe + flamingo
 *     apps already use; `'default'` is the legacy denser variant. New types
 *     should pick `'lg'` whenever the card has a large variant.
 *
 * Adding a new content type = one entry here. RelatedContentSection picks up
 * the new group automatically (no hardcoded set to update). NOTE: the hub's
 * related-content SUGGESTION candidate list is DERIVED from these keys (minus
 * an explicit exclusion knob) — a new entry here becomes a suggestion
 * candidate iff it also resolves through the hub's TYPE_TO_ENTITY → RAG
 * config chain (unresolvable entries are dropped loudly at module load).
 */
export type ContentRefLayout = 'list' | 'grid';
/** Subset of `EntityCardSize` (entity-card dispatch) appropriate for
 *  grid/list rendering in RelatedContentSection. Duplicated as a literal
 *  union here to avoid a config→component import cycle. Kept in lockstep
 *  with `EntityCardSize`; widen here when a new size is added there. */
export type ContentRefGridSize = 'lg' | 'default' | 'sm';
export interface ContentRefGroupConfig {
    label: string;
    order: number;
    layout: ContentRefLayout;
    gridSize: ContentRefGridSize;
}
export declare const CONTENT_REF_GROUPS: Record<string, ContentRefGroupConfig>;
/** Human-readable label for a content_ref `type`. Returns null when the type
 *  isn't registered — caller decides the fallback. Use `getContentRefLabelOrTitleCase`
 *  to get a consistent title-cased fallback across all surfaces. */
export declare function getContentRefLabel(type: string): string | null;
/** Resolved label with a single shared fallback shape — title-cased version
 *  of the raw type string for any unregistered type. Both RelatedContentSection
 *  AND the investor-email builder consume this so cross-surface label rendering
 *  for unregistered types is identical (no drift between "podcast guest" and
 *  "Podcast Guest"). */
export declare function getContentRefLabelOrTitleCase(type: string): string;
/** Sort a set of present content_ref types into the canonical group order
 *  (registered types first in CONTENT_REF_GROUPS `order`, then unregistered
 *  types appended in insertion order). Used by RelatedContentSection AND the
 *  investor-email builder so cross-surface ordering stays identical. */
export declare function orderContentRefTypes(present: Iterable<string>): string[];
//# sourceMappingURL=content-ref-groups.d.ts.map