import React from "react"; import { Theme, StylesObject } from "@webiny/theme/types"; import { GenericComponent, makeDecoratable } from "@webiny/react-composition"; import { Renderer, Element } from "./types"; import { ElementInput, ElementInputs } from "./inputs/ElementInput"; interface GetStylesParams { theme: Theme; element: Element; } export type CreateRendererOptions> = Partial<{ propsAreEqual: (prevProps: TRenderComponentProps & Inputs, nextProps: TRenderComponentProps & Inputs) => boolean; themeStyles: StylesObject | ((params: GetStylesParams) => StylesObject); baseStyles: StylesObject | ((params: GetStylesParams) => StylesObject); inputs: TInputs; }>; export type Inputs = { inputs?: { [K in keyof T]?: T[K] extends ElementInput ? P : never; }; }; type DecoratableComponent = ReturnType>; export declare function createRenderer, TInputs extends ElementInputs = ElementInputs>(RendererComponent: React.FunctionComponent, options?: CreateRendererOptions): DecoratableComponent>> & { Component: DecoratableComponent; inputs?: TInputs; }; /** * This component allows developers to intercept all element renderers using a single decorator. */ export declare const ElementRenderer: ((props: React.ComponentProps & Inputs>> & { renderer: React.ComponentType; }) => React.ReactElement>) & { original: (props: React.ComponentProps & Inputs>> & { renderer: React.ComponentType; }) => React.ReactElement>; originalName: string; displayName: string; } & { original: ((props: React.ComponentProps & Inputs>> & { renderer: React.ComponentType; }) => React.ReactElement>) & { original: (props: React.ComponentProps & Inputs>> & { renderer: React.ComponentType; }) => React.ReactElement>; originalName: string; displayName: string; }; originalName: string; displayName: string; } & { createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<((props: React.ComponentProps & Inputs>> & { renderer: React.ComponentType; }) => React.ReactElement>) & { original: (props: React.ComponentProps & Inputs>> & { renderer: React.ComponentType; }) => React.ReactElement>; originalName: string; displayName: string; }>) => (props: unknown) => React.JSX.Element; }; export {};