react-canvaskit
Version:
A React implementation of the Skia-CanvasKit drawing library.
357 lines (356 loc) • 9.01 kB
TypeScript
import type { Canvas as SkCanvas, CanvasKit, Image as SkImage, Paragraph as SkParagraph, Surface as SkSurface } from 'canvaskit-wasm';
import type { MutableRefObject } from 'react';
import type { CkCanvasProps } from './CkCanvas';
import type { CkEncodedImageProps } from './CkEncodedImage';
import type { CkLineProps } from './CkLine';
import type { CkParagraphProps } from './CkParagraph';
import type { CkSurfaceProps } from './CkSurface';
import type { CkTextProps } from './CkText';
export declare type CkElementProps<T> = {
ref?: MutableRefObject<T | null | undefined>;
};
export interface CkObjectTyping {
'ck-surface': {
type: SkSurface;
name: 'SkSurface';
props: CkSurfaceProps;
};
'ck-canvas': {
type: SkCanvas;
name: 'SkCanvas';
props: CkCanvasProps;
};
'ck-line': {
type: never;
name: 'Line';
props: CkLineProps;
};
'ck-text': {
type: never;
name: 'Text';
props: CkTextProps;
};
'ck-paragraph': {
type: SkParagraph;
name: 'SkParagraph';
props: CkParagraphProps;
};
'ck-encoded-image': {
type: SkImage;
name: 'SkImage';
props: CkEncodedImageProps;
};
}
export declare type CkElementType = keyof CkObjectTyping;
export interface CkElement<TypeName extends keyof CkObjectTyping> {
readonly canvasKit: CanvasKit;
readonly type: TypeName;
props: CkObjectTyping[TypeName]['props'];
readonly skObjectType: CkObjectTyping[TypeName]['name'];
skObject?: CkObjectTyping[TypeName]['type'];
render(parent: CkElementContainer<any>): void;
delete(): void;
}
export interface CkElementCreator<TypeName extends keyof CkObjectTyping> {
(type: TypeName, props: CkObjectTyping[TypeName]['props'], canvasKit: CanvasKit): CkElement<TypeName>;
}
export declare function isContainerElement(ckElement: CkElement<any>): ckElement is CkElementContainer<any>;
export interface CkElementContainer<TypeName extends keyof CkObjectTyping> extends CkElement<TypeName> {
children: CkElement<any>[];
}
export interface Color {
red: number;
green: number;
blue: number;
alpha?: number;
}
export declare type ColorTypeName = 'Color';
export declare enum FilterQuality {
}
export declare enum StrokeCap {
}
export declare enum StrokeJoin {
}
export declare enum BlendMode {
}
export declare type ColorFilter = BlendColorFilter | ComposeColorFilter | LerpColorFilter | LinearToSRGBGammaColorFilter | MatrixColorFilter | SRGBToLinearGammaColorFilter;
export interface BlendColorFilter {
color: Color;
blendMode: BlendMode;
}
export interface ComposeColorFilter {
first: ColorFilter;
second: ColorFilter;
}
export interface LerpColorFilter {
lerp: number;
first: ColorFilter;
second: ColorFilter;
}
export declare type LinearToSRGBGammaColorFilter = 'LinearToSRGBGamma';
export interface MatrixColorFilter {
matrix: Matrix;
}
export declare type SRGBToLinearGammaColorFilter = 'SRGBToLinearGamma';
export declare type ImageFilter = BlurImageFilter | ColorImageFilter | ComposeImageFilter | MatrixTransformImageFilter;
export declare enum TileMode {
}
export interface BlurImageFilter {
rx: number;
ry: number;
tileMode: TileMode;
next: ImageFilter | null;
}
export interface ColorImageFilter {
filter: ColorFilter;
next: ImageFilter | null;
}
export interface ComposeImageFilter {
first: ImageFilter;
second: ImageFilter;
}
export declare enum FilterQuality {
}
export interface MatrixTransformImageFilter {
matrix: MatrixColorFilter;
filterQuality: FilterQuality;
next: ImageFilter | null;
}
export declare type MaskFilter = BlurMaskFilter;
export declare enum BlurStyle {
}
export interface BlurMaskFilter {
blurStyle: BlurStyle;
radius: number;
b: boolean;
}
export declare type PathEffect = DashPathEffect | CornerPathEffect | DiscretePathEffect;
export interface DashPathEffect {
intervals: number[];
phase: number;
}
export interface CornerPathEffect {
radius: number;
}
export interface DiscretePathEffect {
frequency: number;
amplitude: number;
seed: number;
}
export declare type Shader = LinearGradientShader | RadialGradientShader | TwoPointConicalGradientShader;
export declare type Point = [number, number];
export declare type Matrix = [number, number, number, number, number, number, number, number, number];
export interface LinearGradientShader {
start: Point;
end: Point;
colors: Color[];
positions: number[];
mode: number;
localMatrix: Matrix | null;
flags: number;
}
export interface RadialGradientShader {
center: Point;
radius: number;
colors: Color[];
positions: number[];
mode: number;
localMatrix?: Matrix;
flags: number;
}
export interface TwoPointConicalGradientShader {
start: Point;
startRadius: number;
end: Point;
endRadius: number;
colors: Color[];
positions: number[];
mode: number;
localMatrix?: Matrix;
flags: number;
}
export declare enum PaintStyle {
/**
* Fill the geometry.
*/
Fill = 0,
/**
* Stroke the geometry.
*/
Stroke = 1,
/**
* Fill and stroke the geometry.
*/
StrokeAndFill = 2
}
export interface Paint {
blendMode?: BlendMode;
color?: Color | string;
filterQuality?: FilterQuality;
strokeCap?: StrokeCap;
strokeJoin?: StrokeJoin;
strokeMiter?: number;
strokeWidth?: number;
antiAlias?: boolean;
colorFilter?: ColorFilter;
imageFilter?: ImageFilter;
maskFilter?: MaskFilter;
pathEffect?: PathEffect;
shader?: Shader;
style?: PaintStyle;
}
export interface LineProps {
x1: number;
y1: number;
x2: number;
y2: number;
paint: Paint;
}
export declare enum TextAlignEnum {
Left = 0,
Center = 1,
Right = 2
}
export declare enum TextDirectionEnum {
Ltr = 0,
Rtl = 1
}
export declare enum FontWeightEnum {
/**
* A thick font weight of 900.
*/
Black = 900,
/**
* A thick font weight of 700. This is the default for a bold font.
*/
Bold = 700,
/**
* A thick font weight of 1000.
*/
ExtraBlack = 1000,
/**
* A thick font weight of 800.
*/
ExtraBold = 800,
/**
* A thin font weight of 200.
*/
ExtraLight = 200,
/**
* The font has no thickness at all.
*/
Invisible = 0,
/**
* A thin font weight of 300.
*/
Light = 300,
/**
*A thicker font weight of 500.
*/
Medium = 500,
/**
*A typical font weight of 400. This is the default font weight.
*/
Normal = 400,
/**
*A thick font weight of 600.
*/
SemiBold = 600,
/**
*A thin font weight of 100.
*/
Thin = 100
}
export declare enum FontSlantEnum {
Upright = 0,
Italic = 1,
Oblique = 2
}
export declare enum FontWidthEnum {
/**
* A condensed font width of 3.
*/
Condensed = 3,
/**
* An expanded font width of 7.
*/
Expanded = 7,
/**
*A condensed font width of 2.
*/
ExtraCondensed = 2,
/**
*An expanded font width of 8.
*/
ExtraExpanded = 8,
/**
*A normal font width of 5. This is the default font width.
*/
Normal = 5,
/**
*A condensed font width of 4.
*/
SemiCondensed = 4,
/**
*An expanded font width of 6.
*/
SemiExpanded = 6,
/**
*A condensed font width of 1.
*/
UltraCondensed = 1,
/**
*An expanded font width of 9.
*/
UltraExpanded = 9
}
export interface TypeFace {
data: ArrayBuffer;
}
export interface Font {
typeFace?: TypeFace;
size: number;
}
export interface CkFontStyle {
weight?: FontWeightEnum;
slant?: FontSlantEnum;
width?: FontWidthEnum;
}
export interface TextStyle {
backgroundColor?: Color | string;
color?: Color | string;
decoration?: number;
decorationThickness?: number;
fontFamilies?: string[];
fontSize?: number;
fontStyle?: CkFontStyle;
foregroundColor?: Color | string;
}
export interface ParagraphStyle {
disableHinting?: boolean;
heightMultiplier?: number;
ellipsis?: string;
maxLines?: number;
textAlign?: TextAlignEnum;
textDirection?: TextDirectionEnum;
textStyle: TextStyle;
}
export interface ParagraphProps {
style: ParagraphStyle;
maxWidth: number;
x: number;
y: number;
}
export declare function createCkElement(type: CkElementType, props: CkElementProps<any>, canvasKit: CanvasKit): CkElement<any>;
declare global {
namespace JSX {
interface IntrinsicElements {
'ck-text': CkTextProps;
'ck-canvas': CkCanvasProps;
'ck-surface': CkSurfaceProps;
'ck-line': CkLineProps;
'ck-paragraph': CkParagraphProps;
'ck-encoded-image': CkEncodedImageProps;
}
}
}