import React from 'react'; import { ComponentResolverOrObject } from '../render/componentRegistry.js'; import { JSX } from 'react'; import { ExperienceStructureNode, ExperienceNode, ExperienceComponentNode, DisplaySettingsType, ExperienceCompositionNode, InferredContentReference } from '../infer.js'; export { withAppContext } from './context/contextWrapper.js'; export { getContext, setContext, getContextData, setContextData, configureAdapter, getAdapter, } from '../context/config.js'; export { ReactContextAdapter } from '../context/reactContextAdapter.js'; export type { ContextAdapter, ContextData } from '../context/baseContext.js'; type ComponentType = React.ComponentType; type InitOptions = { resolver: ComponentResolverOrObject; }; /** * Initializes the React component registry * * @param options Initialization options. * @param options.resolver Either a ComponentResolver function for dynamic resolution, * or a ComponentMap object for static mappings between content types and components * * * @example * Using a static component map: * * ```ts * initReactComponentRegistry({ * resolver: { * 'ButtonContentType': ButtonComponent, * // You can define tags using the `ContentType:Tag` syntax: * 'ButtonContentType:ChristmasTag': ChristmasButtonComponent, * 'CardContentType': { * default: DefaultCardComponent, * tags: { ChristmasTag: ChristmasCardComponent } * } * } * }); * ``` * * @example * Using a dynamic resolver function: * * ```ts * initReactComponentRegistry({ * resolver: (contentType, options) => { * if (contentType === 'Button') { * return options?.tag === 'primary' ? PrimaryButton : DefaultButton; * } * return undefined; * } * }); * ``` */ export declare function initReactComponentRegistry(options: InitOptions): void; /** Props for the {@linkcode OptimizelyComponent} component */ type OptimizelyComponentProps = { /** Data read from the CMS */ content: { /** Content type name */ __typename: string; /** Display template tag (if any) */ __tag?: string; displayTemplateKey?: string | null; /** Preview context */ __context?: { edit: boolean; preview_token: string; }; __composition?: ExperienceCompositionNode; }; displaySettings?: Record; }; export declare function OptimizelyComponent({ content, displaySettings, ...props }: OptimizelyComponentProps): Promise; export type StructureContainerProps = { node: ExperienceStructureNode; children: React.ReactNode; index?: number; displaySettings?: Record; }; export type ComponentContainerProps = { node: ExperienceComponentNode; children: React.ReactNode; displaySettings?: Record; }; export type StructureContainer = (props: StructureContainerProps) => JSX.Element; export type ComponentContainer = (props: ComponentContainerProps) => JSX.Element; export declare function OptimizelyComposition({ nodes, ComponentWrapper, }: { nodes: ExperienceNode[]; ComponentWrapper?: ComponentContainer; }): import("react/jsx-runtime.js").JSX.Element[]; type OptimizelyGridSectionProps = { nodes: ExperienceNode[]; row?: StructureContainer; column?: StructureContainer; displaySettings?: DisplaySettingsType[]; }; export declare function OptimizelyGridSection({ nodes, row, column }: OptimizelyGridSectionProps): import("react/jsx-runtime.js").JSX.Element[]; /** Get context-aware functions for preview */ export declare function getPreviewUtils(content: OptimizelyComponentProps['content']): { /** Get the HTML data attributes required for a property */ pa(property?: string | { key: string; }): { 'data-epi-property-name': string; 'data-epi-block-id'?: undefined; } | { 'data-epi-block-id': string; 'data-epi-property-name'?: undefined; } | { 'data-epi-property-name'?: undefined; 'data-epi-block-id'?: undefined; }; /** * Appends preview token to a ContentReference's Image assets. * Adds the preview token to the main URL and all rendition URLs when in preview mode. * * @param input - ContentReference from a DAM asset * @returns ContentReference with preview tokens appended to all URLs, or the original if not in preview mode * * @example * ```tsx * const { src } = getPreviewUtils(content); * * * ``` */ src(input: InferredContentReference | string | null | undefined): string | undefined; };