- >
- );
-}
-
-export default App;
diff --git a/examples/basic-with-hook/src/index.js b/examples/basic-with-hook/src/index.js
deleted file mode 100644
index c1f31c5..0000000
--- a/examples/basic-with-hook/src/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App';
-
-ReactDOM.render(
-
-
- ,
- document.getElementById('root')
-);
diff --git a/examples/basic/README.md b/examples/basic/README.md
deleted file mode 100644
index 146c4ed..0000000
--- a/examples/basic/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Basic
-
-This is a very basic example of using the Rive component to autoplay a simple looping animation.
-
-## To Run
-
-This example is created using [Create React App](https://reactjs.org/docs/create-a-new-react-app.html).
-
-To install and run:
-
-```
-npm install
-npm start
-```
diff --git a/examples/basic/package.json b/examples/basic/package.json
deleted file mode 100644
index 2d4166c..0000000
--- a/examples/basic/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "basic-example",
- "version": "0.1.0",
- "private": true,
- "dependencies": {
- "@testing-library/jest-dom": "^5.13.0",
- "@testing-library/react": "^11.2.7",
- "@testing-library/user-event": "^12.8.3",
- "react": "file:../../node_modules/react",
- "react-dom": "^17.0.2",
- "react-scripts": "4.0.3",
- "rive-react": "file:../..",
- "web-vitals": "^1.1.2"
- },
- "scripts": {
- "start": "SKIP_PREFLIGHT_CHECK=true react-scripts start"
- },
- "eslintConfig": {
- "extends": [
- "react-app",
- "react-app/jest"
- ]
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- }
-}
diff --git a/examples/basic/public/index.html b/examples/basic/public/index.html
deleted file mode 100644
index 1c3b6f1..0000000
--- a/examples/basic/public/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
- Rive React - Basic
-
-
-
-
-
-
diff --git a/examples/basic/public/poison-loader.riv b/examples/basic/public/poison-loader.riv
deleted file mode 100644
index a946fa4..0000000
Binary files a/examples/basic/public/poison-loader.riv and /dev/null differ
diff --git a/examples/basic/src/App.js b/examples/basic/src/App.js
deleted file mode 100644
index e784b69..0000000
--- a/examples/basic/src/App.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import Rive from 'rive-react';
-
-function App() {
- return (
- // The animation will fit to the parent element.
-
-
-
- );
-}
-
-export default App;
diff --git a/examples/basic/src/index.js b/examples/basic/src/index.js
deleted file mode 100644
index c1f31c5..0000000
--- a/examples/basic/src/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App';
-
-ReactDOM.render(
-
-
- ,
- document.getElementById('root')
-);
diff --git a/examples/play-on-hover/README.md b/examples/play-on-hover/README.md
deleted file mode 100644
index dd8f0b9..0000000
--- a/examples/play-on-hover/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Play on hover
-
-This provides an example of how to play/pause a Rive animation when the mouse is hovered over it.
-
-## To Run
-
-This example is created using [Create React App](https://reactjs.org/docs/create-a-new-react-app.html).
-
-To install and run:
-
-```
-npm install
-npm start
-```
diff --git a/examples/play-on-hover/package.json b/examples/play-on-hover/package.json
deleted file mode 100644
index c2e88c7..0000000
--- a/examples/play-on-hover/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "play-on-hover",
- "version": "0.1.0",
- "private": true,
- "dependencies": {
- "@testing-library/jest-dom": "^5.13.0",
- "@testing-library/react": "^11.2.7",
- "@testing-library/user-event": "^12.8.3",
- "react": "^17.0.2",
- "react-dom": "^17.0.2",
- "react-scripts": "4.0.3",
- "rive-react": "latest",
- "web-vitals": "^1.1.2"
- },
- "scripts": {
- "start": "SKIP_PREFLIGHT_CHECK=true react-scripts start"
- },
- "eslintConfig": {
- "extends": [
- "react-app",
- "react-app/jest"
- ]
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- }
-}
diff --git a/examples/play-on-hover/public/index.html b/examples/play-on-hover/public/index.html
deleted file mode 100644
index a64d5f5..0000000
--- a/examples/play-on-hover/public/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
- Rive React - Play on hover
-
-
-
-
-
-
diff --git a/examples/play-on-hover/public/poison-loader.riv b/examples/play-on-hover/public/poison-loader.riv
deleted file mode 100644
index a946fa4..0000000
Binary files a/examples/play-on-hover/public/poison-loader.riv and /dev/null differ
diff --git a/examples/play-on-hover/src/App.js b/examples/play-on-hover/src/App.js
deleted file mode 100644
index d6a6385..0000000
--- a/examples/play-on-hover/src/App.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import { useRive } from 'rive-react';
-
-function App() {
- const params = {
- src: 'poison-loader.riv',
- autoplay: false,
- };
-
- const { RiveComponent, rive } = useRive(params);
-
- function onMouseEnter() {
- // `rive` will return as null until the file as fully loaded, so we include this
- // guard to prevent any unwanted errors.
- if (rive) {
- rive.play();
- }
- }
-
- function onMouseLeave() {
- if (rive) {
- rive.pause();
- }
- }
-
- return (
-
-
-
- );
-}
-
-export default App;
diff --git a/examples/play-on-hover/src/index.js b/examples/play-on-hover/src/index.js
deleted file mode 100644
index c1f31c5..0000000
--- a/examples/play-on-hover/src/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App';
-
-ReactDOM.render(
-
-
- ,
- document.getElementById('root')
-);
diff --git a/examples/play-pause-button/README.md b/examples/play-pause-button/README.md
deleted file mode 100644
index 92c23df..0000000
--- a/examples/play-pause-button/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Play/Pause Buttons
-
-This example shows how we can play/pause the Rive animation on a button click and update the text of the button based on events happening in the runtime.
-
-## To Run
-
-This example is created using [Create React App](https://reactjs.org/docs/create-a-new-react-app.html).
-
-To install and run:
-
-```
-npm install
-npm start
-```
diff --git a/examples/play-pause-button/package.json b/examples/play-pause-button/package.json
deleted file mode 100644
index 0eb50e8..0000000
--- a/examples/play-pause-button/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "play-pause-button",
- "version": "0.1.0",
- "private": true,
- "dependencies": {
- "@testing-library/jest-dom": "^5.13.0",
- "@testing-library/react": "^11.2.7",
- "@testing-library/user-event": "^12.8.3",
- "react": "^17.0.2",
- "react-dom": "^17.0.2",
- "react-scripts": "4.0.3",
- "rive-react": "latest",
- "web-vitals": "^1.1.2"
- },
- "scripts": {
- "start": "SKIP_PREFLIGHT_CHECK=true react-scripts start"
- },
- "eslintConfig": {
- "extends": [
- "react-app",
- "react-app/jest"
- ]
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- }
-}
diff --git a/examples/play-pause-button/public/index.html b/examples/play-pause-button/public/index.html
deleted file mode 100644
index 750f1bc..0000000
--- a/examples/play-pause-button/public/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
- Rive React - Play/Pause Button
-
-
-
-
-
-
diff --git a/examples/play-pause-button/public/poison-loader.riv b/examples/play-pause-button/public/poison-loader.riv
deleted file mode 100644
index a946fa4..0000000
Binary files a/examples/play-pause-button/public/poison-loader.riv and /dev/null differ
diff --git a/examples/play-pause-button/src/App.js b/examples/play-pause-button/src/App.js
deleted file mode 100644
index 803beaa..0000000
--- a/examples/play-pause-button/src/App.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import { useEffect, useState } from 'react';
-import { useRive } from 'rive-react';
-
-function App() {
- const [buttonText, setButtonText] = useState('Pause');
- const { RiveComponent, rive } = useRive({
- src: 'poison-loader.riv',
- autoplay: true,
- });
-
- useEffect(() => {
- if (rive) {
- // "play" event is fired when the animation starts to play, so we update
- // button text on this event.
- rive.on('play', () => {
- setButtonText('Pause');
- });
-
- // As above, the "pause" event is fired when the animation pauses.
- rive.on('pause', () => {
- setButtonText('Play');
- });
- }
- // We listen for changes to the rive object. The rive object will be null
- // until the rive file has loaded.
- }, [rive]);
-
- function onButtonClick() {
- // `rive` will return as null until the file as fully loaded, so we include this
- // guard to prevent any unwanted errors.
- if (rive) {
- if (rive.isPlaying) {
- rive.pause();
- } else {
- rive.play();
- }
- }
- }
-
- return (
- // The animation will fit to the parent element, so we set a large height
- // and width for this example.
-
-
-
-
- );
-}
-
-export default App;
diff --git a/examples/play-pause-button/src/index.js b/examples/play-pause-button/src/index.js
deleted file mode 100644
index c1f31c5..0000000
--- a/examples/play-pause-button/src/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App';
-
-ReactDOM.render(
-
-
- ,
- document.getElementById('root')
-);
diff --git a/examples/state-machine-boolean-input/README.md b/examples/state-machine-boolean-input/README.md
deleted file mode 100644
index 3b6f811..0000000
--- a/examples/state-machine-boolean-input/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# State Machine Boolean Input
-
-This example shows how to interact with a state machine, using various onMouse\* callbacks to trigger transations.
-
-## To Run
-
-This example is created using [Create React App](https://reactjs.org/docs/create-a-new-react-app.html).
-
-To install and run:
-
-```
-npm install
-npm start
-```
diff --git a/examples/state-machine-boolean-input/package.json b/examples/state-machine-boolean-input/package.json
deleted file mode 100644
index 058ca80..0000000
--- a/examples/state-machine-boolean-input/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "state-machine-boolean-input",
- "version": "0.1.0",
- "private": true,
- "dependencies": {
- "@testing-library/jest-dom": "^5.13.0",
- "@testing-library/react": "^11.2.7",
- "@testing-library/user-event": "^12.8.3",
- "react": "^17.0.2",
- "react-dom": "^17.0.2",
- "react-scripts": "4.0.3",
- "rive-react": "latest",
- "web-vitals": "^1.1.2"
- },
- "scripts": {
- "start": "SKIP_PREFLIGHT_CHECK=true react-scripts start"
- },
- "eslintConfig": {
- "extends": [
- "react-app",
- "react-app/jest"
- ]
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- }
-}
diff --git a/examples/state-machine-boolean-input/public/index.html b/examples/state-machine-boolean-input/public/index.html
deleted file mode 100644
index f7322bc..0000000
--- a/examples/state-machine-boolean-input/public/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
- Rive React - State Machine Boolean Input
-
-
-
-
-
-
diff --git a/examples/state-machine-boolean-input/src/App.js b/examples/state-machine-boolean-input/src/App.js
deleted file mode 100644
index bf7382a..0000000
--- a/examples/state-machine-boolean-input/src/App.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import { useRive, useStateMachineInput } from 'rive-react';
-
-function App() {
- const STATE_MACHINE_NAME = 'State Machine 1';
- const ON_HOVER_INPUT_NAME = 'Hover';
- const ON_PRESSED_INPUT_NAME = 'Pressed';
-
- const { RiveComponent, rive } = useRive({
- src: 'like.riv',
- stateMachines: STATE_MACHINE_NAME,
- artboard: 'New Artboard',
- autoplay: true,
- });
-
- // Both onHoverInput and onPressedInput are boolean inputs. To transition
- // states we need to set the value property to true or false.
- const onHoverInput = useStateMachineInput(
- rive,
- STATE_MACHINE_NAME,
- ON_HOVER_INPUT_NAME
- );
- const onPressedInput = useStateMachineInput(
- rive,
- STATE_MACHINE_NAME,
- ON_PRESSED_INPUT_NAME
- );
-
- function onMouseEnter() {
- onHoverInput.value = true;
- }
-
- function onMouseLeave() {
- onHoverInput.value = false;
- }
-
- function onMouseDown() {
- onPressedInput.value = true;
- }
-
- function onMouseUp() {
- onPressedInput.value = false;
- }
-
- return (
- // The animation will fit to the parent element, so we set a large height
- // and width for this example.
-
-
-
- );
-}
-
-export default App;
diff --git a/examples/state-machine-boolean-input/src/index.js b/examples/state-machine-boolean-input/src/index.js
deleted file mode 100644
index c1f31c5..0000000
--- a/examples/state-machine-boolean-input/src/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App';
-
-ReactDOM.render(
-
-
- ,
- document.getElementById('root')
-);
diff --git a/examples/state-machine-number-input/README.md b/examples/state-machine-number-input/README.md
deleted file mode 100644
index 756317c..0000000
--- a/examples/state-machine-number-input/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# State Machine Number Input
-
-This example shows how to interact with a state machine with number inputs. We trigger the transistions by changing the value of a number input.
-
-## To Run
-
-This example is created using [Create React App](https://reactjs.org/docs/create-a-new-react-app.html).
-
-To install and run:
-
-```
-npm install
-npm start
-```
diff --git a/examples/state-machine-number-input/package.json b/examples/state-machine-number-input/package.json
deleted file mode 100644
index 273d411..0000000
--- a/examples/state-machine-number-input/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "state-machine-number-input",
- "version": "0.1.0",
- "private": true,
- "dependencies": {
- "@testing-library/jest-dom": "^5.13.0",
- "@testing-library/react": "^11.2.7",
- "@testing-library/user-event": "^12.8.3",
- "react": "^17.0.2",
- "react-dom": "^17.0.2",
- "react-scripts": "4.0.3",
- "rive-react": "latest",
- "web-vitals": "^1.1.2"
- },
- "scripts": {
- "start": "SKIP_PREFLIGHT_CHECK=true react-scripts start"
- },
- "eslintConfig": {
- "extends": [
- "react-app",
- "react-app/jest"
- ]
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- }
-}
diff --git a/examples/state-machine-number-input/public/index.html b/examples/state-machine-number-input/public/index.html
deleted file mode 100644
index 46d5d28..0000000
--- a/examples/state-machine-number-input/public/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
- Rive React - State Machine Number Input
-
-
-
-
-
-
diff --git a/examples/state-machine-number-input/src/App.js b/examples/state-machine-number-input/src/App.js
deleted file mode 100644
index 61117a2..0000000
--- a/examples/state-machine-number-input/src/App.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import { useRive, useStateMachineInput } from 'rive-react';
-
-function App() {
- const STATE_MACHINE_NAME = 'State Machine ';
- const INPUT_NAME = 'Level';
-
- const { RiveComponent, rive } = useRive({
- src: 'skills.riv',
- stateMachines: STATE_MACHINE_NAME,
- artboard: 'New Artboard',
- autoplay: true,
- });
-
- // levelInput is a number state machine input. To transition the state machine,
- // we need to set the value to a number. For this state machine input, we need
- // to set to 0, 1 or 2 for a state transition to occur.
- const levelInput = useStateMachineInput(rive, STATE_MACHINE_NAME, INPUT_NAME);
-
- return (
- // The animation will fit to the parent element, so we set a large height
- // and width for this example.
-
-
-
- Level:
-
-
-
-
-
- );
-}
-
-export default App;
diff --git a/examples/state-machine-number-input/src/index.js b/examples/state-machine-number-input/src/index.js
deleted file mode 100644
index c1f31c5..0000000
--- a/examples/state-machine-number-input/src/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App';
-
-ReactDOM.render(
-
-
- ,
- document.getElementById('root')
-);
diff --git a/examples/state-machine-trigger-input/README.md b/examples/state-machine-trigger-input/README.md
deleted file mode 100644
index eb73c91..0000000
--- a/examples/state-machine-trigger-input/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# State Machine Trigger Input
-
-This example shows how to interact with a state machine with a trigger input. We call the `fire()` function on the state machine input to transition the state when the animation is clicked.
-
-## To Run
-
-This example is created using [Create React App](https://reactjs.org/docs/create-a-new-react-app.html).
-
-To install and run:
-
-```
-npm install
-npm start
-```
diff --git a/examples/state-machine-trigger-input/package.json b/examples/state-machine-trigger-input/package.json
deleted file mode 100644
index 8483e22..0000000
--- a/examples/state-machine-trigger-input/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "state-machine-trigger-input",
- "version": "0.1.0",
- "private": true,
- "dependencies": {
- "@testing-library/jest-dom": "^5.13.0",
- "@testing-library/react": "^11.2.7",
- "@testing-library/user-event": "^12.8.3",
- "react": "^17.0.2",
- "react-dom": "^17.0.2",
- "react-scripts": "4.0.3",
- "rive-react": "latest",
- "web-vitals": "^1.1.2"
- },
- "scripts": {
- "start": "SKIP_PREFLIGHT_CHECK=true react-scripts start"
- },
- "eslintConfig": {
- "extends": [
- "react-app",
- "react-app/jest"
- ]
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- }
-}
diff --git a/examples/state-machine-trigger-input/public/index.html b/examples/state-machine-trigger-input/public/index.html
deleted file mode 100644
index f27e47b..0000000
--- a/examples/state-machine-trigger-input/public/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
- Rive React - State Machine Trigger Input
-
-
-
-
-
-
diff --git a/examples/state-machine-trigger-input/src/App.js b/examples/state-machine-trigger-input/src/App.js
deleted file mode 100644
index 06c223e..0000000
--- a/examples/state-machine-trigger-input/src/App.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import { useRive, useStateMachineInput } from 'rive-react';
-
-function App() {
- const STATE_MACHINE_NAME = 'State Machine 1';
- const INPUT_NAME = 'Pressed';
-
- const { RiveComponent, rive } = useRive({
- src: 'piggy-bank.riv',
- stateMachines: STATE_MACHINE_NAME,
- artboard: 'New Artboard',
- autoplay: true,
- });
-
- // pressedInput in a trigger state machine input. To transition the state
- // we need to call the `fire()` method on the input.
- const pressedInput = useStateMachineInput(
- rive,
- STATE_MACHINE_NAME,
- INPUT_NAME
- );
-
- return (
- // The animation will fit to the parent element, so we set a large height
- // and width for this example.
-
- pressedInput.fire()} />
-
- );
-}
-
-export default App;
diff --git a/examples/state-machine-trigger-input/src/index.js b/examples/state-machine-trigger-input/src/index.js
deleted file mode 100644
index c1f31c5..0000000
--- a/examples/state-machine-trigger-input/src/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App';
-
-ReactDOM.render(
-
-
- ,
- document.getElementById('root')
-);
diff --git a/examples/stories/AnimationPlayback.stories.mdx b/examples/stories/AnimationPlayback.stories.mdx
new file mode 100644
index 0000000..37bd40c
--- /dev/null
+++ b/examples/stories/AnimationPlayback.stories.mdx
@@ -0,0 +1,99 @@
+import { useState } from 'react';
+
+import { Canvas, Meta, Story, ArgsTable } from '@storybook/addon-docs';
+
+import {useRive, useStateMachineInput} from '../../src';
+import {Button} from './components/Button';
+import './rive-overview.css';
+
+
+
+# Animation Playback
+
+When rendering Rives, you may want to control animation playback for certain scenarios. Animation playback allows you to programatically pause, stop, play, reset, and scrub animations as needed. You may find this useful for coordinating certain user interaction or other programatic cases to Rive animations.
+
+**Note:** Just like the Rive web runtime, you invoke playback methods on a `rive` instance. Because of this, you will need to use the `useRive` method to render Rives to your React applications, as it returns a `rive` instance for you to invoke controls on.
+
+## User event-driven playback
+
+You can control Rive animation playback with user interaction directly on the canvas, or even outside the canvas, as you'll see below.
+
+### Play/pause with hover
+
+The example below shows how to start with a Rive instance that does not autoplay initially, but plays whenever the cursor is hovered over the canvas, and returns to a paused state when the mouse leaves the canvas.
+
+
+
+## Play/pause with external elements
+
+This example shows how you can control Rive elements via user interaction outside of the canvas, such as other buttons. Here, the play/pause button will toggle whether or not to play or pause the Rive animation.
+
+
+
+## Additional ways to control playback
+
+While user interaction is a common way to control animation playback for Rives, there are other ways to achieve the same means as well.
+
+### API-driven playback
+
+Another common way to control animation playback is through API responses. As long as you hold a reference to the `rive` instance returned from the `useRive` hook, you can invoke control methods on that instance in places such as callbacks from API responses.
+
diff --git a/examples/stories/RiveOverview.stories.mdx b/examples/stories/RiveOverview.stories.mdx
new file mode 100644
index 0000000..25dfa29
--- /dev/null
+++ b/examples/stories/RiveOverview.stories.mdx
@@ -0,0 +1,112 @@
+
+
+import { useState } from 'react';
+
+import { Canvas, Meta, Story, ArgsTable } from '@storybook/addon-docs';
+
+import RiveComponent, {useRive, useStateMachineInput} from '../../src';
+import {Button} from './components/Button';
+import './rive-overview.css';
+
+
+
+# Rive React Runtime
+
+This is an examples/docs page for the official React runtime for Rive. Check out the various pages for how to use this SDK to incorporate Rive into your React-based web applications.
+
+Want to follow along with these examples? Check out the `examples/` folder in the [rive-react](https://github.com/rive-app/rive-react) project to find all these examples and `.riv` assets you can inspect in the Rive editor by dragging and dropping them into your Rive editor file browser.
+
+## What is Rive?
+
+
+
+[Rive](https://rive.app/) is a real-time interactive design and animation tool. Use our collaborative editor to create motion graphics that respond to different states and user inputs. Then load your animations into apps, games, and websites with our lightweight open-source runtimes.
+
+## How to use Rive at runtime
+
+There's multiple ways to render Rive using the React runtime. See the associated code snippets that follow each example.
+
+### Rive component
+
+```tsx
+import RiveComponent from '@rive-app/react-canvas';
+```
+The React runtime exports a default React component you can insert as JSX. Under the hood, it renders a `