import type { slides_v1 } from "googleapis"; export interface SlideContent { index: number; page_id: string; title: string; body: string[]; speaker_notes: string; image_count: number; table_count: number; has_video: boolean; /** Number of embedded links resolved inline as markdown across this slide. */ link_count: number; } /** * Resolve a Slides text-run link to a markdown href. * - `url` (external) → the url verbatim. * - `pageObjectId` (link to another slide) → `slide:`. * - `relativeLink` (NEXT_SLIDE, …) / `slideIndex` are navigation, not * resources → undefined (rendered as plain text). */ export declare function linkHref(link: slides_v1.Schema$Link | undefined | null): string | undefined; export interface TextRunLike { content: string; link?: string; } /** * Join text runs into a single string, wrapping linked runs as markdown * `[text](href)`. Contiguous runs sharing the same href are coalesced into one * link, and surrounding whitespace (e.g. a trailing `\n` on the run) is kept * *outside* the brackets so the link text stays clean across run boundaries. */ export declare function runsToMarkdown(runs: TextRunLike[]): { text: string; links: number; }; /** * Extract the visible text content of a slide: best-effort title (from * a TITLE / CENTERED_TITLE placeholder), the body text from every other * shape and table in document order, and the speaker notes from the * slide's associated notes page. Embedded links resolve inline as markdown. * * Images / videos / charts get no inline content — we just count them * so agents can tell visual-heavy decks apart from text-heavy ones. */ export declare function extractSlideContent(slide: slides_v1.Schema$Page, index: number): SlideContent; export declare function isSlidePage(p: slides_v1.Schema$Page): boolean;