/**
 * Rendering components and utilities for Riverbank CMS.
 *
 * This entry point is the SDK surface for rendering. It intentionally avoids
 * exporting any `@riverbankcms/blocks` types in its `.d.ts`.
 */
export { Page } from './components/Page';
export type { PageProps } from './components/Page';
export { Layout } from './components/Layout';
export type { LayoutProps, HeaderData, FooterData } from './components/Layout';
export { Block } from './components/Block';
export type { BlockProps } from './components/Block';
export { loadPage } from './helpers/loadPage';
export type { LoadPageParams, LoadPageResult } from './helpers/loadPage';
export { loadContent, isPageContent, isEntryContent } from './helpers/loadContent';
export type { LoadContentParams, LoadContentResult, ContentEntryData, PagePreviewMetadata, SiteData } from './helpers/loadContent';
export type { AppointmentBookingContent, BlogListingContent, BlogPostContent, BodyTextAlignment, BodyTextContent, ButtonVariant, CalendarTabViews, CardStylesContent, CollectionContent, ColumnsContent, ColumnOption, ContainerStylesContent, CourseDetailsContent, CourseRegistrationContent, CtaFullContent, DisplayMode, EmbedContent, EventCalendarContent, EventDetailsContent, EventLayout, EventListingContent, EventRegistrationContent, EventSpotlightContent, FaqContent, FaqItem, FilterAutoShow, FormBlockContent, GiftingContent, HeroContent, HeroCta, HeroCtaInput, HeroMedia, ImageColSize, ImageGalleryContent, LayoutAlign, LayoutWidth, Media, MediaTextAlignment, MediaTextAspectRatio, MediaTextContent, MediaTextImagePosition, NewsletterSignupContent, NewsletterSignupPreset, TipTapNode, TipTapMark, LinkValue, InternalLinkValue, ExternalLinkValue, CustomLinkValue, PageLinkValue, EntryLinkValue, RichTextPrimitiveProps, RichTextVariant, PageOutline, BlockOutline, RouteMap, RouteMapEntry, OccurrenceContextData, EntrySubrouteContextData, Theme, ThemeTokens, SectionStylesContent, SemanticSpacing, ShopContent, SingleButtonContent, SiteFooterContent, SiteHeaderContent, StackContentAlignment, StackImagePosition, SystemBlockContentByFullKind, SystemBlockContentByKind, SystemBlockContentFor, SystemBlockShortKind, TeamMembersContent, TestimonialEntryContent, TestimonialsBlockContent, ThumbnailPadding, ThumbnailShape, VideoGridContent, WeekStart, MediaAssetIndexItem, ImageOptions, ResolveImageUrlContext, ResolveImageUrlContextInput, ResolveImageSourceSetOptions, ResolvedImageSourceSet, } from '../contracts';
export { ImagePresets } from '../contracts';
export { RichText } from './primitives/RichText';
export { resolveImageUrl, resolveImageUrlWithContext, resolveImageSourceSetWithContext, } from './image';
export { PageRenderer, } from './blocks-page-renderer';
export { ThemeScope, } from './blocks-theme-scope';
export { buildThemeRuntime, } from './blocks-theme-runtime';
export type { ComponentRegistry, PageRendererDataContext, PageRendererProps, SdkConfigForRenderer, } from './blocks-page-renderer';
export type { ThemeScopeProps, } from './blocks-theme-scope';
export type { BlockOverrideProps, BlockOverrideComponent, BlockOverrides, KnownSystemBlockOverrides, } from './overrides';
/**
 * @example Server-side rendering (Next.js App Router)
 * ```tsx
 * import { createRiverbankClient } from '@riverbankcms/sdk';
 * import { loadPage, Page } from '@riverbankcms/sdk/rendering';
 *
 * // Note: baseUrl must include the /api path
 * const client = createRiverbankClient({
 *   apiKey: process.env.RIVERBANK_API_KEY,
 *   baseUrl: process.env.NEXT_PUBLIC_DASHBOARD_URL + '/api',
 * });
 *
 * export default async function PageRoute({ params }) {
 *   const pageData = await loadPage({
 *     client,
 *     siteId: 'site-id',
 *     path: `/${params.slug || ''}`,
 *   });
 *
 *   return <Page {...pageData} />;
 * }
 * ```
 *
 * @example Client-side rendering
 * ```tsx
 * 'use client';
 * import { createRiverbankClient } from '@riverbankcms/sdk';
 * import { usePage } from '@riverbankcms/sdk/hooks';
 * import { Page } from '@riverbankcms/sdk/rendering';
 *
 * const client = createRiverbankClient({
 *   apiKey: process.env.NEXT_PUBLIC_RIVERBANK_API_KEY,
 *   baseUrl: process.env.NEXT_PUBLIC_DASHBOARD_URL + '/api',
 * });
 *
 * function MyPage({ path }) {
 *   const pageData = usePage({ client, siteId: 'site-id', path });
 *
 *   if (pageData.loading) return <div>Loading...</div>;
 *   if (pageData.error) return <div>Error: {pageData.error.message}</div>;
 *
 *   return <Page {...pageData} />;
 * }
 * ```
 */
