import * as React from 'react';
import {
Style,
PageSize,
FontStore,
PDFVersion,
Orientation,
SourceObject,
HyphenationCallback,
SVGPresentationAttributes,
} from '@lachie-pdf/types';
declare namespace ReactPDF {
interface Styles {
[key: string]: Style;
}
interface OnRenderProps {
blob?: Blob;
}
interface DocumentProps {
title?: string;
author?: string;
subject?: string;
creator?: string;
keywords?: string;
producer?: string;
language?: string;
pdfVersion?: PDFVersion;
onRender?: (props: OnRenderProps) => any;
children?: React.ReactNode;
}
/**
* This component represent the PDF document itself. It must be the root
* of your tree element structure, and under no circumstances should it be
* used as children of another react-pdf component. In addition, it should
* only have childs of type .
*/
class Document extends React.Component {}
interface NodeProps {
id?: string;
style?: Style | Style[];
/**
* Render component in all wrapped pages.
* @see https://react-pdf.org/advanced#fixed-components
*/
fixed?: boolean;
/**
* Force the wrapping algorithm to start a new page when rendering the
* element.
* @see https://react-pdf.org/advanced#page-breaks
*/
break?: boolean;
/**
* Hint that no page wrapping should occur between all sibling elements following the element within n points
* @see https://react-pdf.org/advanced#orphan-&-widow-protection
*/
minPresenceAhead?: number;
}
interface PageProps extends NodeProps {
/**
* Enable page wrapping for this page.
* @see https://react-pdf.org/components#page-wrapping
*/
wrap?: boolean;
/**
* Enables debug mode on page bounding box.
* @see https://react-pdf.org/advanced#debugging
*/
debug?: boolean;
size?: PageSize;
orientation?: Orientation;
children?: React.ReactNode;
}
/**
* Represents single page inside the PDF document, or a subset of them if
* using the wrapping feature. A can contain as many pages as
* you want, but ensure not rendering a page inside any component besides
* Document.
*/
class Page extends React.Component {}
interface ViewProps extends NodeProps {
id?: string;
/**
* Enable/disable page wrapping for element.
* @see https://react-pdf.org/components#page-wrapping
*/
wrap?: boolean;
/**
* Enables debug mode on page bounding box.
* @see https://react-pdf.org/advanced#debugging
*/
debug?: boolean;
render?: (props: {
pageNumber: number;
subPageNumber: number;
}) => React.ReactNode;
children?: React.ReactNode;
}
/**
* The most fundamental component for building a UI and is designed to be
* nested inside other views and can have 0 to many children.
*/
class View extends React.Component {}
interface BaseImageProps extends NodeProps {
/**
* Enables debug mode on page bounding box.
* @see https://react-pdf.org/advanced#debugging
*/
debug?: boolean;
cache?: boolean;
}
interface ImageWithSrcProp extends BaseImageProps {
src: SourceObject;
}
interface ImageWithSourceProp extends BaseImageProps {
source: SourceObject;
}
type ImageProps = ImageWithSrcProp | ImageWithSourceProp;
/**
* A React component for displaying network or local (Node only) JPG or
* PNG images, as well as base64 encoded image strings.
*/
class Image extends React.Component {}
interface TextProps extends NodeProps {
id?: string;
/**
* Enable/disable page wrapping for element.
* @see https://react-pdf.org/components#page-wrapping
*/
wrap?: boolean;
/**
* Enables debug mode on page bounding box.
* @see https://react-pdf.org/advanced#debugging
*/
debug?: boolean;
render?: (props: {
pageNumber: number;
totalPages: number;
subPageNumber: number;
subPageTotalPages: number;
}) => React.ReactNode;
children?: React.ReactNode;
/**
* Override the default hyphenation-callback
* @see https://react-pdf.org/fonts#registerhyphenationcallback
*/
hyphenationCallback?: HyphenationCallback;
/**
* Specifies the minimum number of lines in a text element that must be shown at the bottom of a page or its container.
* @see https://react-pdf.org/advanced#orphan-&-widow-protection
*/
orphans?: number;
/**
* Specifies the minimum number of lines in a text element that must be shown at the top of a page or its container..
* @see https://react-pdf.org/advanced#orphan-&-widow-protection
*/
widows?: number;
}
interface SVGTextProps extends SVGPresentationAttributes {
style?: SVGPresentationAttributes;
x: string | number;
y: string | number;
/**
* Override the default hyphenation-callback
* @see https://react-pdf.org/fonts#registerhyphenationcallback
*/
hyphenationCallback?: HyphenationCallback;
}
/**
* A React component for displaying text. Text supports nesting of other
* Text or Link components to create inline styling.
*/
class Text extends React.Component {}
interface LinkProps extends NodeProps {
/**
* Enable/disable page wrapping for element.
* @see https://react-pdf.org/components#page-wrapping
*/
wrap?: boolean;
/**
* Enables debug mode on page bounding box.
* @see https://react-pdf.org/advanced#debugging
*/
debug?: boolean;
src: string;
children?: React.ReactNode;
}
/**
* A React component for displaying a hyperlink. Link’s can be nested
* inside a Text component, or being inside any other valid primitive.
*/
class Link extends React.Component {}
interface NoteProps extends NodeProps {
children: string;
}
class Note extends React.Component {}
interface CanvasProps extends NodeProps {
/**
* Enables debug mode on page bounding box.
* @see https://react-pdf.org/advanced#debugging
*/
debug?: boolean;
paint: (
painter: any,
availableWidth: number,
availableHeight: number,
) => null;
}
class Canvas extends React.Component {}
interface SVGProps extends NodeProps {
/**
* Enables debug mode on page bounding box.
* @see https://react-pdf.org/advanced#debugging
*/
debug?: boolean;
width?: string | number;
height?: string | number;
viewBox?: string;
preserveAspectRatio?: string;
}
/**
* The element is a container that defines a new coordinate system and viewport. It is used as the outermost element of SVG documents.
*/
class Svg extends React.Component {}
interface LineProps extends SVGPresentationAttributes {
style?: SVGPresentationAttributes;
x1: string | number;
x2: string | number;
y1: string | number;
y2: string | number;
}
/**
* The element is used to create a line.
*/
class Line extends React.Component {}
interface PolylineProps extends SVGPresentationAttributes {
style?: SVGPresentationAttributes;
points: string;
}
/**
* The element is used to create any shape that consists of only straight lines (that is connected at several points).
*/
class Polyline extends React.Component {}
interface PolygonProps extends SVGPresentationAttributes {
style?: SVGPresentationAttributes;
points: string;
}
/**
* The element is used to create a graphic that contains at least three sides.
* Polygons are made of straight lines, and the shape is "closed" (all the lines connect up).
*/
class Polygon extends React.Component {}
interface PathProps extends SVGPresentationAttributes {
style?: SVGPresentationAttributes;
d: string;
}
/**
* The element is the most powerful element in the SVG library of basic shapes. It can be used to create lines, curves, arcs, and more.
*/
class Path extends React.Component {}
interface RectProps extends SVGPresentationAttributes {
style?: SVGPresentationAttributes;
x: string | number;
y: string | number;
width: string | number;
height: string | number;
rx?: string | number;
ry?: string | number;
}
/**
* The element is used to create a rectangle and variations of a rectangle shape.
*/
class Rect extends React.Component {}
interface CircleProps extends SVGPresentationAttributes {
style?: SVGPresentationAttributes;
cx: string | number;
cy: string | number;
r: string | number;
}
/**
* The element is used to create a circle.
*/
class Circle extends React.Component {}
interface EllipseProps extends SVGPresentationAttributes {
style?: SVGPresentationAttributes;
cx: string | number;
cy: string | number;
rx: string | number;
ry: string | number;
}
/**
* The element is used to create an ellipse.
* An ellipse is closely related to a circle. The difference is that an ellipse has an x and a y radius that differs from each other, while a circle has equal x and y radius.
*/
class Ellipse extends React.Component {}
interface TspanProps extends SVGPresentationAttributes {
x?: string | number;
y?: string | number;
}
/**
* The element defines a subtext within a element or another element.
* It allows for adjustment of the style and/or position of that subtext as needed.
*/
class Tspan extends React.Component {}
interface GProps extends SVGPresentationAttributes {}
/**
* The SVG element is a container used to group other SVG elements.
* Transformations applied to the element are performed on its child elements, and its attributes are inherited by its children.
*/
class G extends React.Component {}
interface StopProps {
offset: string | number;
stopColor: string;
stopOpacity?: string | number;
}
/**
* The SVG element defines a color and its position to use on a gradient. This element is always a child of a or element
*/
class Stop extends React.Component {}
interface DefsProps {}
/**
* The element is used to store graphical objects that will be used at a later time. Objects created inside a element are not rendered directly. To display them you have to reference them
*/
class Defs extends React.Component {}
interface ClipPathProps {
id?: string;
}
/**
* The SVG element defines a clipping path, to be used by the clipPath property.
* A clipping path restricts the region to which paint can be applied. Conceptually, parts of the drawing that lie outside of the region bounded by the clipping path are not drawn.
*/
class ClipPath extends React.Component {}
interface LinearGradientProps {
id: string;
x1: string | number;
x2: string | number;
y1: string | number;
y2: string | number;
}
/**
* The element lets authors define linear gradients that can be applied to fill or stroke of graphical elements.
*/
class LinearGradient extends React.Component {}
interface RadialGradientProps {
id: string;
cx: string | number;
cy: string | number;
fr: string | number;
fx: string | number;
fy: string | number;
}
/**
* The element lets authors define radial gradients that can be applied to fill or stroke of graphical elements.
*/
class RadialGradient extends React.Component {}
interface BlobProviderParams {
blob: Blob | null;
url: string | null;
loading: boolean;
error: Error | null;
}
interface BlobProviderProps {
document: React.ReactElement;
children: (params: BlobProviderParams) => React.ReactNode;
}
/**
* Easy and declarative way of getting document's blob data without
* showing it on screen.
* @see https://react-pdf.org/advanced#on-the-fly-rendering
* @platform web
*/
class BlobProvider extends React.Component {}
interface PDFViewerProps {
width?: number | string;
height?: number | string;
style?: Style | Style[];
className?: string;
children?: React.ReactElement;
innerRef?: React.Ref;
showToolbar?: boolean;
}
/**
* Iframe PDF viewer for client-side generated documents.
* @platform web
*/
class PDFViewer extends React.Component {}
interface PDFDownloadLinkProps {
document: React.ReactElement;
fileName?: string;
style?: Style | Style[];
className?: string;
children?:
| React.ReactNode
| ((params: BlobProviderParams) => React.ReactNode);
onClick?: Function;
}
/**
* Anchor tag to enable generate and download PDF documents on the fly.
* @see https://react-pdf.org/advanced#on-the-fly-rendering
* @platform web
*/
class PDFDownloadLink extends React.Component {}
interface UsePDFInstance {
loading: boolean;
blob: Blob | null;
url: string | null;
error: string | null;
}
/**
* React hook for creating and updating a PDF document instance
* @platform web
*/
function usePDF(options: {
document: React.ReactElement;
}): [UsePDFInstance, () => void];
const Font: FontStore;
const StyleSheet: {
create: (styles: T) => T;
};
const version: any;
const PDFRenderer: any;
const pdf: (
initialValue?: React.ReactElement,
) => {
container: any;
isDirty: () => boolean;
toString: () => string;
toBlob: () => Promise;
toBuffer: () => Promise;
on: (event: 'change', callback: () => void) => void;
updateContainer: (document: React.ReactElement) => void;
removeListener: (event: 'change', callback: () => void) => void;
};
const renderToStream: (
document: React.ReactElement,
) => Promise;
const renderToString: (document: React.ReactElement) => Promise;
const renderToFile: (
document: React.ReactElement,
filePath: string,
callback?: (output: NodeJS.ReadableStream, filePath: string) => any,
) => Promise;
const render: typeof renderToFile;
}
declare const pdf: typeof ReactPDF.pdf;
declare const Document: typeof ReactPDF.Document;
declare const Page: typeof ReactPDF.Page;
declare const View: typeof ReactPDF.View;
declare const Image: typeof ReactPDF.Image;
declare const Text: typeof ReactPDF.Text;
declare const Canvas: typeof ReactPDF.Canvas;
declare const Link: typeof ReactPDF.Link;
declare const Note: typeof ReactPDF.Note;
declare const Svg: typeof ReactPDF.Svg;
declare const Line: typeof ReactPDF.Line;
declare const Polyline: typeof ReactPDF.Polyline;
declare const Polygon: typeof ReactPDF.Polygon;
declare const Path: typeof ReactPDF.Path;
declare const Rect: typeof ReactPDF.Rect;
declare const Circle: typeof ReactPDF.Circle;
declare const Ellipse: typeof ReactPDF.Ellipse;
declare const Tspan: typeof ReactPDF.Tspan;
declare const G: typeof ReactPDF.G;
declare const Stop: typeof ReactPDF.Stop;
declare const Defs: typeof ReactPDF.Defs;
declare const ClipPath: typeof ReactPDF.ClipPath;
declare const LinearGradient: typeof ReactPDF.LinearGradient;
declare const RadialGradient: typeof ReactPDF.RadialGradient;
declare const Font: typeof ReactPDF.Font;
declare const StyleSheet: typeof ReactPDF.StyleSheet;
declare const PDFRenderer: typeof ReactPDF.PDFRenderer;
declare const version: typeof ReactPDF.version;
declare const renderToFile: typeof ReactPDF.renderToFile;
declare const renderToString: typeof ReactPDF.renderToString;
declare const renderToStream: typeof ReactPDF.renderToStream;
declare const usePDF: typeof ReactPDF.usePDF;
declare const PDFViewer: typeof ReactPDF.PDFViewer;
declare const BlobProvider: typeof ReactPDF.BlobProvider;
declare const PDFDownloadLink: typeof ReactPDF.PDFDownloadLink;
export default ReactPDF;
export {
pdf,
Document,
Page,
View,
Image,
Text,
Canvas,
Link,
Note,
Svg,
Line,
Polyline,
Polygon,
Path,
Rect,
Circle,
Ellipse,
Tspan,
G,
Stop,
Defs,
ClipPath,
LinearGradient,
RadialGradient,
Font,
StyleSheet,
PDFRenderer,
version,
renderToFile,
renderToStream,
renderToString,
usePDF,
PDFViewer,
BlobProvider,
PDFDownloadLink,
};