@rive-app/webgl
Version:
Rive's webgl based web api.
1,241 lines (1,142 loc) • 36.8 kB
TypeScript
interface RiveOptions {
locateFile(file: string): string;
}
declare function Rive(options?: RiveOptions): Promise<RiveCanvas>;
export default Rive;
/**
* RiveCanvas is the main export object that contains references to different Rive classes to help
* build the Rive render loop for low-level API usage. In addition, this contains multiple methods
* that help aid in setup, such as loading in a Rive file, creating the renderer, and
* starting/finishing the render loop (requestAnimationFrame)
*/
export interface RiveCanvas {
Alignment: AlignmentFactory;
CanvasRenderer: typeof CanvasRenderer;
LinearAnimationInstance: typeof LinearAnimationInstance;
StateMachineInstance: typeof StateMachineInstance;
CustomFileAssetLoader: typeof CustomFileAssetLoader;
Mat2D: typeof Mat2D;
Vec2D: typeof Vec2D;
AABB: AABB;
SMIInput: typeof SMIInput;
renderFactory: CanvasRenderFactory;
BlendMode: typeof BlendMode;
FillRule: typeof FillRule;
Fit: typeof Fit;
RenderPaintStyle: typeof RenderPaintStyle;
StrokeCap: typeof StrokeCap;
StrokeJoin: typeof StrokeJoin;
decodeAudio: DecodeAudio;
decodeImage: DecodeImage;
decodeFont: DecodeFont;
/**
* Loads a Rive file for the runtime and returns a Rive-specific File class
*
* @param buffer - Array buffer of a Rive file
* @param assetLoader - FileAssetLoader used to optionally customize loading of font and image assets
* @param enableRiveAssetCDN - boolean flag to allow loading assets from the Rive CDN, enabled by default.
* @returns A Promise for a Rive File class
*/
load(
buffer: Uint8Array,
assetLoader?: FileAssetLoader,
enableRiveAssetCDN?: boolean,
): Promise<File>;
/**
* Creates the renderer to draw the Rive on the provided canvas element
*
* @param canvas - Canvas to draw the Rive on
* @param useOffscreenRenderer - Option for those using the WebGL-variant of the Rive JS library.
* This uses an offscreen renderer to draw on the canvas, allowing for multiple Rives/canvases on
* a given screen. It is highly recommended to set this to `true` when using with the
* `@rive-app/webgl` package
* @returns A Rive CanvasRenderer (Canvas2D) or Renderer (WebGL) class
*/
makeRenderer(
canvas: HTMLCanvasElement | OffscreenCanvas,
useOffscreenRenderer?: boolean,
): WrappedRenderer;
/**
* Computes how the Rive is laid out onto the canvas
* @param {Fit} fit - Fit enum (i.e Fit.contain)
* @param alignment - Alignment enum (i.e Alignment.center)
* @param frame - AABB object representing the bounds of the canvas frame
* @param content - AABB object representing the bounds of what to draw the Rive onto
* (i.e an artboard's size)
* @param scaleFactor - Scale factor of the artboard when using `Fit.layout`
* @returns Mat2D - A Mat2D view matrix
*/
computeAlignment(
fit: Fit,
alignment: Alignment,
frame: AABB,
content: AABB,
scaleFactor?: number,
): Mat2D;
mapXY(matrix: Mat2D, canvasPoints: Vec2D): Vec2D;
/**
* A Rive-specific requestAnimationFrame function; this must be used instead of the global
* requestAnimationFrame function.
* @param cb - Callback function to call with an elapsed timestamp
* @returns number - An ID of the requestAnimationFrame request
*/
requestAnimationFrame(cb: (timestamp: DOMHighResTimeStamp) => void): number;
/**
* A Rive-specific cancelAnimationFrame function; this must be used instead of the global
* cancelAnimationFrame function.
* @param requestID - ID of the requestAnimationFrame request to cancel
*/
cancelAnimationFrame(requestID: number): void;
/**
* A Rive-specific function to "flush" queued up draw calls from using the renderer.
*
* This should only be invoked once at the end of a loop in a regular JS
* requestAnimationFrame loop, and should not be used with the Rive-wrapped
* requestAnimationFrame (aka, the requestAnimationFrame() API on this object) as that
* API will handle flushing the draw calls implicitly.
*/
resolveAnimationFrame(): void;
/**
* Debugging tool to showcase the FPS in the corner of the screen in a new div. If a callback
* function is provided, this function passes the FPS count to the callback instead of creating a
* new div so the client can decide what to do with that data.
*/
enableFPSCounter(cb?: (fps: number) => void): void;
/**
* Debugging tool to remove the FPS counter that displays from enableFPSCounter
*/
disableFPSCounter(): void;
/**
* Cleans up any WASM-generate objects that need to be destroyed manually.
* This should be called when you wish to remove a rive animation from view.
*/
cleanup(): void;
/**
* Returns whether or not there are Rive Listeners configured on a given StateMachineInstance
* @param stateMachine - StateMachineInstance to check for Listeners
* @returns bool - Boolean of if there are Listners on the state machine
*/
hasListeners(stateMachine: StateMachineInstance): boolean;
}
//////////////
// RENDERER //
//////////////
/**
* Rive wrapper around a rendering context for a canvas element, implementing a subset of the APIs
* from the rendering context interface
*/
export declare class RendererWrapper {
/**
* Saves the state of the canvas and pushes it onto a stack
*
* For the underlying API, check
* https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/save
*/
save(): void;
/**
* Restores the most recent state of the canvas saved on the stack
*
* For the underlying API, check
* https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/restore
*/
restore(): void;
transform(tranform: Mat2D): void;
drawPath(path: RenderPath, paint: RenderPaint): void;
clipPath(path: RenderPath): void;
/**
* Calls the context's clearRect() function to clear the entire canvas. Crucial to call
* this at the start of the render loop to clear the canvas before drawing the next frame
*
* For the underlying API, check
* https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/clearRect
*/
clear(): void;
delete(): void;
flush(): void;
translate(x: number, y: number): void;
rotate(angle: number): void;
}
export declare class RenderPathWrapper {
reset(): void;
addPath(path: CommandPath, transform: Mat2D): void;
fillRule(value: FillRule): void;
moveTo(x: number, y: number): void;
lineTo(x: number, y: number): void;
cubicTo(
ox: number,
oy: number,
ix: number,
iy: number,
x: number,
y: number,
): void;
close(): void;
}
export declare class RenderPaintWrapper {
color(value: number): void;
thickness(value: number): void;
join(value: StrokeJoin): void;
cap(value: StrokeCap): void;
blendMode(value: BlendMode): void;
style(value: RenderPaintStyle): void;
linearGradient(sx: number, sy: number, ex: number, ey: number): void;
radialGradient(sx: number, sy: number, ex: number, ey: number): void;
addStop(color: number, stop: number): void;
completeGradient(): void;
}
/**
* Renderer returned when Rive makes a renderer via `makeRenderer()`
*/
export declare class Renderer extends RendererWrapper {
/**
* Aligns the Rive content on the canvas space
* @param fit - Fit enum value
* @param alignment - Alignment enum value
* @param frame - Bounds of the canvas space
* @param content - Bounds of the Rive content
* @param _scaleFactor - Scale factor of the artboard when using `Fit.layout`
*/
align(
fit: Fit,
alignment: Alignment,
frame: AABB,
content: AABB,
scaleFactor?: number,
): void;
}
export declare class CommandPath {}
export declare class RenderPath extends RenderPathWrapper {}
export declare class RenderPaint extends RenderPaintWrapper {}
/////////////////////
// CANVAS RENDERER //
/////////////////////
export declare class CanvasRenderer extends Renderer {
constructor(
ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
);
}
type OmittedCanvasRenderingContext2DMethods =
| "createConicGradient"
| "createImageData"
| "createLinearGradient"
| "createPattern"
| "createRadialGradient"
| "getContextAttributes"
| "getImageData"
| "getLineDash"
| "getTransform"
| "isContextLost"
| "isPointInPath"
| "isPointInStroke"
| "measureText";
/**
* Proxy class that handles calls to a CanvasRenderer instance and handles Rive-related rendering calls such
* as `save`, `restore`, `transform`, and more, effectively overriding and/or wrapping Canvas2D context
* APIs for Rive-specific purposes. Other calls not intentionally overridden are passed through to the
* Canvas2D context directly.
*
* Note: Currently, any calls to the Canvas2D context that you expect to return a value (i.e. `isPointInStroke()`)
* will return undefined
*/
export type CanvasRendererProxy = CanvasRenderer &
Omit<CanvasRenderingContext2D, OmittedCanvasRenderingContext2DMethods>;
/**
* Renderer type for `makeRenderer()` that returns Renderer (webgl) or a CanvasRendererProxy (canvas2d)
*/
export type WrappedRenderer = Renderer | CanvasRendererProxy;
export declare class CanvasRenderPaint extends RenderPaint {
draw(
ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
path: RenderPath,
): void;
}
export declare class CanvasRenderPath extends RenderPath {}
export interface CanvasRenderFactory {
makeRenderPaint(): CanvasRenderPaint;
makeRenderPath(): CanvasRenderPath;
}
export class AudioInternal {
unref(): void;
}
export class Audio {
unref(): void;
get nativeAudio(): AudioInternal;
}
export interface AudioCallback {
(audio: Audio): void;
}
export interface DecodeAudio {
(bytes: Uint8Array, callback: AudioCallback): void;
}
export class ImageInternal {
unref(): void;
}
export class Image {
unref(): void;
get nativeImage(): ImageInternal;
}
export interface ImageCallback {
(image: Image): void;
}
export interface DecodeImage {
(bytes: Uint8Array, callback: ImageCallback): void;
}
export class FontInternal {
unref(): void;
}
export class Font {
unref(): void;
get nativeFont(): FontInternal;
}
export interface FontCallback {
(font: Font): void;
}
export interface DecodeFont {
(bytes: Uint8Array, callback: FontCallback): void;
}
//////////
// File //
//////////
/**
* Rive-specific File class that provides a number of functions to load instances of Artboards
*/
export declare class File {
/**
* Returns the first Artboard found in the Rive file as a new Artboard instance
* @returns An Artboard instance
*/
defaultArtboard(): Artboard; // rive::ArtboardInstance
/**
* Returns the named Artboard found in the Rive file as a new Artboard instance
* @param name - Name of the Artboard to create an instance for
*/
artboardByName(name: string): Artboard; // rive::ArtboardInstance
/**
* Returns a new Artboard instance for the Artboard at the given index in the Rive file
* @param index - Index of the Artboard in the file to create an Artboard instance for
*/
artboardByIndex(index: number): Artboard; // rive::ArtboardInstance
/**
* Returns the number of Artboards in the Rive File
* @returns Number of artboards in the Rive file
*/
artboardCount(): number;
/**
* Returns the number of View Models in the Rive File
* @returns Number of view models in the Rive file
*/
viewModelCount(): number;
/**
* Returns a view model by the index in which it is located in the file
* @returns ViewModel
*/
viewModelByIndex(index: number): ViewModel;
/**
* Returns a view model by name
* @returns ViewModel
*/
viewModelByName(name: string): ViewModel;
/**
* Returns the default view model for the provided artboard
* @returns ViewModel
*/
defaultArtboardViewModel(artboard: Artboard): ViewModel;
/**
* Returns a list of all data enums
* @returns DataEnum array in the Rive file
*/
enums(): DataEnum[];
unref(): void;
/**
* Returns a reference to a bindable artboard from this file by name
* @returns BindableArtboard
*/
bindableArtboardByName(name: string): BindableArtboard;
/**
* Returns a reference to the default bindable artboard
* @returns BindableArtboard
*/
bindableArtboardDefault(): BindableArtboard;
/**
* Returns a reference to a bindable artboard. FOR INTERNAL USE ONLY
* @param artboard - Name of the Artboard to create an instance for
* @returns BindableArtboard
*/
internalBindableArtboardFromArtboard(artboard: Artboard): BindableArtboard;
/**
* Returns a new Artboard instance for the Artboard at the given index in the Rive file
* @param index - Index of the Artboard in the file to create an Artboard instance for
*/
}
/**
* Rive class representing an Artboard instance. Use this class to create instances for
* LinearAnimations, StateMachines, Nodes, Bones, and more. This Artboard instance should also be
* advanced in the drawing render loop.
*
* Important: Make sure to delete this instance when it's no longer in use via the `delete()`
* method. This deletes the underlying c++ reference and frees up the backing WASM object. This can
* be done in cases where the user navigates away from the page with this animation, the canvas is
* unmounted, etc.
*/
export declare class Artboard {
/**
* Get the name of this Artboard instance
*/
get name(): string;
/**
* Get the bounds of this Artboard instance
*/
get bounds(): AABB;
get hasAudio(): boolean;
get frameOrigin(): boolean;
set frameOrigin(val: boolean);
/**
* Getter and setter for the artboard volume
*/
get volume(): number;
set volume(val: number);
/**
* Getter and setter for the artboard width
*/
get artboardWidth(): number;
set artboardWidth(val: number);
/**
* Getter and setter for the artboard height
*/
get artboardHeight(): number;
set artboardHeight(val: number);
/**
* Getter and setter used in rendering and canvas/artboard resizing
*/
get devicePixelRatioUsed(): number;
set devicePixelRatioUsed(val: number);
/**
* Reset the artboard size to its original values
*/
resetArtboardSize(): void;
/**
* Deletes the underlying instance created via the WASM. It's important to clean up this
* instance when no longer in use
*/
delete(): void;
/**
* Advances the Artboard instance by the set amount of seconds. This method updates each object
* in the Artboard with any changes that animations apply on properties of the objects. This
* should be called after calling `advance()` of a LinearAnimationInstance or StateMachineInstance
* @param sec - Scrub the Artboard instance by a number of seconds
*/
advance(sec: number): boolean;
/**
* Draws the artboard with a given rendering context.
* @param renderer - Renderer context to draw with
*/
draw(renderer: CanvasRenderer | Renderer): void;
/**
* Creates a LinearAnimation for the animation with the given name
*
* Note: This does not create a LinearAnimationInstance to advance in the render loop.
* That needs to be created separately.
*
* @param name - Name of the animation to create a LinearAnimation reference for
* @returns A new LinearAnimation object
*/
animationByName(name: string): LinearAnimation;
/**
* Creates a LinearAnimation for the animation with the given index
*
* Note: This does not create a LinearAnimationInstance to advance in the render loop.
* That needs to be created separately.
*
* @param index - Index of the animation to create a LinearAnimation reference for
* @returns A new LinearAnimation object
*/
animationByIndex(index: number): LinearAnimation;
/**
* Returns the number of animations in the artboard
* @returns Number of animations on the Artboard
*/
animationCount(): number;
/**
* Creates a StateMachine for the state machine with the given name.
*
* Note: This does not create a StateMachineInstance to advance in the render loop.
* That needs to be created separately.
*
* @param name - Name of the state machine to create a StateMachine reference for
* @returns A new StateMachine object
*/
stateMachineByName(name: string): StateMachine;
/**
* Creates a StateMachine for the state machine with the given index
*
* Note: This does not create a StateMachineInstance to advance in the render loop.
* That needs to be created separately.
*
* @param index - Index of the state machine to create a StateMachine reference for
* @returns A new StateMachine object
*/
stateMachineByIndex(index: number): StateMachine;
/**
* Returns the number of state machines in the artboard
* @returns Number of state machines on the Artboard
*/
stateMachineCount(): number;
/**
* Returns a reference for a Bone object of a given name.
* Learn more: https://rive.app/community/doc/bones/docYyQwxrgI5
*
* @param name - Name of the Bone to grab a reference to
*/
bone(name: string): Bone;
/**
* Returns a reference for a Node object of a given name from the Artboard hierarchy
* @param name - Name of the Node from the Artboard hierarchy to grab a reference to
*/
node(name: string): Node;
/**
* Returns a reference for a root Bone object of a given name
* @param name - Name of the root Bone to grab a reference to
*/
rootBone(name: string): RootBone;
/**
* Returns a reference for a transform component object of a given name
* @param name - Name of the transform component to grab a reference to
*/
transformComponent(name: string): TransformComponent;
/**
* Returns a reference for a TextValueRun object to get/set a text value for
* @param name - Name of the Text Run to grab a reference to
*/
textRun(name: string): TextValueRun;
/**
* Returns a reference for a SMIInput object to get/set an input value for
* @param name - Name of the Input to grab a reference to
* @param path - Path of where the input exists at an artboard level
*/
inputByPath(name: string, path: string): SMIInput;
/**
* Returns a reference for a TextValueRun object to get/set a text value for
* @param name - Name of the Text Run to grab a reference to
* @param path - Path of where the text exists at an artboard level
*/
textByPath(name: string, path: string): TextValueRun;
/**
* Getter and setter for the artboard width
*/
get width(): number;
set width(val: number);
/**
* Getter and setter for the artboard height
*/
get height(): number;
set height(val: number);
/**
* Reset the artboard size to the original value
*/
resetArtboardSize(): void;
/**
* binds the view model instance to the artboard
* @param instance - Renderer context to draw with
*/
bindViewModelInstance(instance: ViewModelInstance): void;
}
export declare class BindableArtboard {
unref(): void;
}
export declare class Bone extends TransformComponent {
/**
* Length of the bone
*/
length: number;
}
export declare class RootBone extends Bone {
/**
* X coordinate of the position on the RootBone
*/
x: number;
/**
* Y coordinate of the position on the RootBone
*/
y: number;
}
/**
* Representation of a node in the Artboard hierarchy (i.e group, shape, etc.)
*/
export declare class Node extends TransformComponent {
/**
* X coordinate of the position on the Node
*/
x: number;
/**
* Y coordinate of the position on the RootBone
*/
y: number;
}
export declare class TransformComponent {
rotation: number;
scaleX: number;
scaleY: number;
worldTransform(): Mat2D;
parentWorldTransform(result: Mat2D): void;
}
///////////////
// Animation //
///////////////
/**
* Rive class representing a LinearAnimation instance. Use this class to advance and control a
* particular animation in the render loop (i.e speed, scrub, mix, etc.).
*
* Important: Make sure to delete this instance when it's no longer in use via the `delete()`
* method. This deletes the underlying c++ reference and frees up the backing WASM object. This can
* be done in cases where the user navigates away from the page with this animation, the canvas is
* unmounted, etc.
*/
export declare class LinearAnimationInstance {
/**
* Create a new LinearAnimationInstance reference
* @param animation - A LinearAnimation reference retrieved via the Artboard
* (i.e `artboard.animationByName('foo')`)
* @param artboard - The Artboard instance for this animation
*/
constructor(animation: LinearAnimation, artboard: Artboard);
get name(): string;
get duration(): number;
get fps(): number;
get workStart(): number;
get workEnd(): number;
get loopValue(): number;
get speed(): number;
/**
* Number of seconds the animation has advanced by
*/
time: number;
/**
* Flag to determine if the animation looped (this is reset when the loop restarts)
*/
didLoop: boolean;
/**
* Advances/scrubs the LinearAnimationInstance by the set amount of seconds. Note that this only
* moves the "time" in the animation, but does not apply changes to the properties in the
* Artboard. This must be called before the `apply()` method of LinearAnimationInstance.
*
* @param sec - Scrub the animation instance by a number of seconds
*/
advance(sec: number): boolean;
/**
* Apply a mixing value on the animation instance. This is useful if you are looking to blend
* multiple animations together and want to dictate a strength for each of the animations played
* back. This also applies new values to properties of objects on the Artboard according to the
* keys of the animation.
* This must be called after the `advance()` method of `LinearAnimationInstance`
*
* @param mix 0-1 the strength of the animation in the animations mix.
*/
apply(mix: number): void;
/**
* Deletes the underlying instance created via the WASM. It's important to clean up this instance
* when no longer in use
*/
delete(): void;
}
export declare class TextValueRun {
/**
* Getter for the name of the Text Run
*/
get name(): string;
/**
* Getter for text value of the Text Run
*/
get text(): string;
/**
* Setter for the text value of the Text Run
*/
set text(val: string);
}
/**
* Rive Event interface for "General" custom events defined in the Rive editor. Each event has a
* name and optionally some other custom properties and a type
*/
export interface RiveEvent {
/**
* Name of the event fired
*/
name: string;
/**
* Optional type of the specific kind of event fired (i.e. General, OpenUrl)
*/
type?: number;
/**
* Optional custom properties defined on the event
*/
properties?: RiveEventCustomProperties;
/**
* Optional elapsed time since the event specifically occurred
*/
delay?: number;
}
/**
* A specific Rive Event type for "OpenUrl" events. This event type has a URL and optionally a
* target property to dictate how to open the URL
*/
export interface OpenUrlEvent extends RiveEvent {
/**
* URL to open when the event is invoked
*/
url: string;
/**
* Where to display the linked URL
*/
target?: string;
}
/**
* A Rive Event may have any number of optional custom properties defined on itself with variable names
* and values that are either a number, boolean, or string
*/
export interface RiveEventCustomProperties {
/**
* Custom property may be named anything in the Rive editor, and given a value of
* a number, boolean, or string type
*/
[key: string]: number | boolean | string;
}
export declare class LinearAnimation {
/**
* The animation's loop type
*/
get loopValue(): number;
/**
* Name of the LinearAnimation
*/
get name(): string;
}
export declare class StateMachine {
/**
* Name of the StateMachine
*/
get name(): string;
}
/**
* Rive class representing a StateMachine instance. Use this class to advance and control a
* particular state machine in the render loop (i.e scrub, grab state machine inputs, set up
* listener events, etc.).
*
* Important: Make sure to delete this instance when it's no longer in use via the `delete()`
* method. This deletes the underlying c++ reference and frees up the backing WASM object. This can
* be done in cases where the user navigates away from the page with this animation, the canvas is
* unmounted, etc.
*/
export declare class StateMachineInstance {
/**
* Create a new StateMachineInstance reference
* @param stateMachine - A StateMachine retrieved via the Artboard
* (i.e `artboard.stateMachineByName('foo')`)
* @param artboard - The Artboard instance for this state machine
*/
constructor(stateMachine: StateMachine, artboard: Artboard);
get name(): string;
/**
* Returns the number of inputs associated with this state machine
* @returns Number of inputs
*/
inputCount(): number;
/**
* Returns the state machine input at the given index
* @param i - Index to retrieve the state machine input at
* @returns SMIInput reference
*/
input(i: number): SMIInput;
/**
* Advances/scrubs the StateMachineInstance by the set amount of seconds. Note that this does not
* apply changes to the properties of objects in the Artboard yet.
* @param sec - Scrub the state machine instance by a number of seconds
*/
advance(sec: number): boolean;
/**
* Advances/scrubs the StateMachineInstance by the set amount of seconds. Note that this will
* apply changes to the properties of objects in the Artboard.
* @param sec - Scrub the state machine instance by a number of seconds
*/
advanceAndApply(sec: number): boolean;
/**
* Returns the number of states changed while the state machine played
* @returns Number of states changed in the duration of the state machine played
*/
stateChangedCount(): number;
/**
* Returns the name of the state/animation transitioned to, given the index in the array of state
* changes in total
* @param i
* @returns Name of the state/animation transitioned to
*/
stateChangedNameByIndex(i: number): string;
/**
* Returns the number of events reported from the last advance call
* @returns Number of events reported
*/
reportedEventCount(): number;
/**
* Returns a RiveEvent object emitted from the last advance call at the given index
* of a list of potentially multiple events. If an event at the index is not found,
* undefined is returned.
* @param i index of the event reported in a list of potentially multiple events
* @returns RiveEvent or extended RiveEvent object returned, or undefined
*/
reportedEventAt(i: number): OpenUrlEvent | RiveEvent | undefined;
/**
* Notifies the state machine that the pointer has pressed down at the given coordinate in
* Artboard space. Internally, Rive may advance a state machine if the listener coordinate is of
* interest at a given moment.
*
* @param x - X coordinate
* @param y - Y coordinate
*/
pointerDown(x: number, y: number, id: number): void;
/**
* Notifies the state machine that the pointer has moved to the given coordinate in
* Artboard space. Internally, Rive may advance a state machine if the listener coordinate is of
* interest at a given moment.
*
* @param x - X coordinate
* @param y - Y coordinate
*/
pointerMove(x: number, y: number, id: number): void;
/**
* Notifies the state machine that the pointer has released at the given coordinate in
* Artboard space. Internally, Rive may advance a state machine if the listener coordinate is of
* interest at a given moment.
* @param x - X coordinate
* @param y - Y coordinate
*/
pointerUp(x: number, y: number, id: number): void;
/**
* Notifies the state machine that the pointer has exited the detectable area of the canvas surface
*
* @param x - X coordinate
* @param y - Y coordinate
*/
pointerExit(x: number, y: number, id: number): void;
/**
* Deletes the underlying instance created via the WASM. It's important to clean up this instance
* when no longer in use
*/
delete(): void;
/**
* binds the view model instance to the state machine
* @param instance - Renderer context to draw with
*/
bindViewModelInstance(instance: ViewModelInstance): void;
}
export declare class SMIInput {
// TODO: Keep only the base SMIInput properties and make SMIBool, SMINumber, SMITriger extend it
static bool: number;
static number: number;
static trigger: number;
/**
* Getter for name of the state machine input
*/
get name(): string;
get type(): number;
/**
* Getter for value of the state machine input
*/
get value(): boolean | number | undefined;
/**
* Setter for value of the state machine input
*/
set value(val: boolean | number | undefined);
/**
* Fires a trigger input on a state machine
*/
fire(): void;
asBool(): SMIInput;
asNumber(): SMIInput;
asTrigger(): SMIInput;
}
export declare type ViewModelProperty = {
name: string;
type: DataType;
};
export declare class ViewModelInstanceValue {
get hasChanged(): boolean;
clearChanges(): void;
get name(): string;
}
export declare class ViewModelInstanceNumber extends ViewModelInstanceValue {
get value(): number;
set value(val: number);
}
export declare class ViewModelInstanceTrigger extends ViewModelInstanceValue {
trigger(): void;
}
export declare class ViewModelInstanceString extends ViewModelInstanceValue {
get value(): string;
set value(val: string);
}
export declare class ViewModelInstanceBoolean extends ViewModelInstanceValue {
get value(): boolean;
set value(val: boolean);
}
export declare class ViewModelInstanceColor extends ViewModelInstanceValue {
get value(): number;
set value(val: number);
rgb(r: number, g: number, b: number): void;
argb(a: number, r: number, g: number, b: number): void;
alpha(a: number): void;
}
export declare class ViewModelInstanceEnum extends ViewModelInstanceValue {
get value(): string;
set value(val: string);
get valueIndex(): number;
set valueIndex(val: number);
get values(): string[];
}
export declare class ViewModelInstanceList extends ViewModelInstanceValue {
get size(): number;
addInstance(vmi: ViewModelInstance): void;
addInstanceAt(vmi: ViewModelInstance, index: number): boolean;
removeInstance(vmi: ViewModelInstance): void;
removeInstanceAt(index: number): void;
instanceAt(index: number): ViewModelInstance;
swap(a: number, b: number): ViewModelInstance;
}
export declare class ViewModelInstanceAssetImage extends ViewModelInstanceValue {
value(image: ImageInternal | null): void;
}
export declare class ViewModelInstanceArtboard extends ViewModelInstanceValue {
value(artboard: BindableArtboard | Artboard): void;
}
export declare class ViewModelInstance {
get propertyCount(): number;
number(path: string): ViewModelInstanceNumber;
string(path: string): ViewModelInstanceString;
boolean(path: string): ViewModelInstanceBoolean;
color(path: string): ViewModelInstanceColor;
enum(path: string): ViewModelInstanceEnum;
trigger(path: string): ViewModelInstanceTrigger;
list(path: string): ViewModelInstanceList;
viewModel(path: string): ViewModelInstance;
image(path: string): ViewModelInstanceAssetImage;
artboard(path: string): ViewModelInstanceArtboard;
replaceViewModel(path: string, value: ViewModelInstance): boolean;
incrementReferenceCount(): void;
decrementReferenceCount(): void;
delete(): void;
unref(): void;
getProperties(): ViewModelProperty[];
}
export declare class ViewModel {
get instanceCount(): number;
instanceByIndex(index: number): ViewModelInstance;
instanceByName(name: string): ViewModelInstance;
defaultInstance(): ViewModelInstance;
instance(): ViewModelInstance;
getProperties(): ViewModelProperty[];
getInstanceNames(): string[];
get propertyCount(): number;
get name(): string;
}
export declare class DataEnum {
get name(): string;
get values(): string[];
}
export declare class SMIBool {}
export declare class SMINumber {}
export declare class SMITrigger {}
///////////
// ENUMS //
///////////
export enum DataType {
none,
string,
number,
boolean,
color,
list,
enumType,
trigger,
viewModel,
}
export enum Fit {
fill,
contain,
cover,
fitWidth,
fitHeight,
none,
scaleDown,
layout,
}
export enum RenderPaintStyle {
fill,
stroke,
}
export enum FillRule {
nonZero,
evenOdd,
}
export enum StrokeCap {
butt,
round,
square,
}
export enum StrokeJoin {
miter,
round,
bevel,
}
export enum BlendMode {
srcOver = 3,
screen = 14,
overlay = 15,
darken = 16,
lighten = 17,
colorDodge = 18,
colorBurn = 19,
hardLight = 20,
softLight = 21,
difference = 22,
exclusion = 23,
multiply = 24,
hue = 25,
saturation = 26,
color = 27,
luminosity = 28,
}
///////////
// UTILS //
///////////
export declare class Alignment {
get x(): number;
get y(): number;
}
export declare class AlignmentFactory {
get topLeft(): Alignment;
get topCenter(): Alignment;
get topRight(): Alignment;
get centerLeft(): Alignment;
get center(): Alignment;
get centerRight(): Alignment;
get bottomLeft(): Alignment;
get bottomCenter(): Alignment;
get bottomRight(): Alignment;
}
/**
* Axis-aligned bounding box
*/
export interface AABB {
minX: number;
minY: number;
maxX: number;
maxY: number;
}
/**
* Column-major matrix described by the following:
* | xx yx tx |
* | xy yy ty |
* | 0 0 1 |
*/
export declare class Mat2D {
xx: number;
xy: number;
yx: number;
yy: number;
tx: number;
ty: number;
/**
* Returns whether or not a matrix could be inverted, and if yes, sets the resulting Mat2D into
* the passed-in `mat` parameter
*
* @param mat - Reference Mat2D to store the newly inverted matrix into if successful
* @returns True if the matrix could be inverted
*/
invert(mat: Mat2D): boolean;
/**
* Deletes the underlying CPP object created for this instance
*/
delete(): void;
}
/**
* Rive Vector class
*/
export declare class Vec2D {
constructor(x: number, y: number);
/**
* Returns the x coordinate of the vector
*/
x(): number;
/**
* Returns the y coordinate of the vector
*/
y(): number;
/**
* Deletes the underlying CPP object created for this instance
*/
delete(): void;
}
/**
* Rive class representing a FileAsset with relevant metadata fields to describe
* an asset associated wtih the Rive File
*/
export declare class FileAsset {
name: string;
fileExtension: string;
uniqueFilename: string;
isAudio: boolean;
isImage: boolean;
isFont: boolean;
cdnUuid: string;
decode(bytes: Uint8Array): void;
get nativeAsset(): FileAssetInternal;
}
/**
* Rive class representing a FileAsset with relevant metadata fields to describe
* an asset associated wtih the Rive File
*/
export declare class FileAssetInternal {
name: string;
fileExtension: string;
uniqueFilename: string;
isAudio: boolean;
isImage: boolean;
isFont: boolean;
cdnUuid: string;
decode(bytes: Uint8Array): void;
}
export declare class AudioAssetInternal extends FileAssetInternal {
setAudioSource(audio: AudioInternal): void;
}
/**
* Rive class extending the FileAsset that exposes a `setAudioSource()` API with a
* decoded Audio (via the `decodeAudio()` API) to set a new Audio on the Rive FileAsset
*/
export declare class AudioAsset extends FileAsset {
setAudioSource(audio: Audio): void;
}
export declare class ImageAssetInternal extends FileAssetInternal {
setRenderImage(image: ImageInternal): void;
}
/**
* Rive class extending the FileAsset that exposes a `setRenderImage()` API with a
* decoded Image (via the `decodeImage()` API) to set a new Image on the Rive FileAsset
*/
export declare class ImageAsset extends FileAsset {
setRenderImage(image: Image): void;
}
export declare class FontAssetInternal extends FileAssetInternal {
setFont(font: FontInternal): void;
}
/**
* Rive class extending the FileAsset that exposes a `setFont()` API with a
* decoded Font (via the `decodeFont()` API) to set a new Font on the Rive FileAsset
*/
export declare class FontAsset extends FileAsset {
setFont(font: Font): void;
}
export declare class FileAssetLoader {}
export declare class CustomFileAssetLoader extends FileAssetLoader {
constructor({ loadContents }: { loadContents: Function });
loadContents(asset: FileAsset, bytes: any): boolean;
}
export interface FinalizableTarget {
selfUnref: boolean;
}