/**
* Shared row chrome for any `DevSectionPage` list (delivery, tickets,
* future sections). One source of truth for the layout that every
* dev-section card row uses:
* left column → title (h3) / subtitle (h5 uppercase) / description
* (h4 line-clamp-3), each in a fixed min-height block
* so rows align across the grid
* right column → caller-supplied stacked badges
*
* Surface stays small on purpose — `rightBadges` is a `ReactNode` so
* the caller decides how many badges (delivery: 2, tickets: 1-2,
* future: anything). No behavior baked in: the caller wraps the row
* in a `
` (static, like delivery) or `` (clickable, like
* tickets) and renders the row content via this component.
*
* Pair with `DevCardRowSkeletonList` for the loading state — the
* skeleton mirrors the same min-heights so the in-flight UI doesn't
* shift the layout when real data lands.
*
* NOTE: the ticket conversation row is NOT here — it renders the shared
* `` (`components/chat/chat-message-row.tsx`), the SAME
* component the OpenMSP Slack-community feed uses, so the two surfaces stay
* pixel-identical by construction.
*/
import type { ReactNode } from 'react';
export interface DevCardRowContentProps {
title: string;
/** Single-line uppercase metadata (e.g. "UPDATED today, #4271, Code review"). */
subtitle: string;
/** 3-line description block. Empty string renders the fallback. */
description: string;
/** Fallback copy when `description` is empty. Defaults to a generic
* string; ticket / delivery surfaces override. */
emptyDescription?: string;
/** Right column — caller renders its own stacked badges. */
rightBadges: ReactNode;
}
export declare function DevCardRowContent({ title, subtitle, description, emptyDescription, rightBadges, }: DevCardRowContentProps): import("react").JSX.Element;
/**
* Skeleton rendering for a single row — the bars mirror the same
* min-heights as `DevCardRowContent` so the loading→loaded swap
* doesn't reflow.
*/
export declare function DevCardRowSkeleton(): import("react").JSX.Element;
/**
* The standard "5 skeleton rows inside a bordered card" loading state
* used by every list shell. Both delivery (`delivery-table.tsx`) and
* tickets (`tickets-list.tsx`) mount this directly.
*/
export declare function DevCardRowSkeletonList({ rows }: {
rows?: number;
}): import("react").JSX.Element;
//# sourceMappingURL=dev-card-row.d.ts.map