• Stars
    star
    2,825
  • Rank 16,110 (Top 0.4 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 7 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The best way to build animation compositions for React.

https://jondot.github.io/react-flight/

The best way to build animation compositions for React. Design and compose a component to start with, a component to end with, and Flight will take it from there.

Flight tries to be for React what Principle is for Sketch compositions - the fastest, most friction free way to compose and an effortless way to animate an idea, an interaction, or a short movie-like composition in a self-contained widget (a React component after all).

Check out the new video:

React Flight in Three Minutes

Quick Start (From Scratch)

Just clone and use the example, built around create-react-app:

$ git clone https://github.com/jondot/react-flight
$ cd react-flight/examples/compos
$ yarn && yarn start

Quick Start (Existing Project)

With yarn (or npm):

$ yarn add react-flight
$ curl https://raw.githubusercontent.com/jondot/react-flight/master/examples/compos/src/index.js -o src/anim.js

And now you can frame your compositions in anim.js, require and place it in any other React component.

Next:

  1. Add jQuery (or Zepto, or any jQuery drop-in) if you don't have it already in the project.
  2. Or if you use create-react-app you can add it to your public/index.html, like here, or eject and configure webpack for jQuery.

NOTE: jQuery is currently a requirement of one of react-flight's dependencies. We plan to rebuild that dependency any way, obsoleting this requirement in the process (also: PRs accepted!).

Workflow

When you're designing compositions, focus on designing frames. The first frame is marked source because that's the starting point, and interactive because you want to play with it while you go.

  <Flight interactive ref={flight => (this.flight = flight)}>
    <Flight.Frame duration={300} source interactive showFrames>

Showing Frames

While designing, you want to have showFrames on. It will unpack all of the frames in front of you, so you could edit them while watching them. With Webpack hot-reload this becomes a fantastic experience.

When done, remove showFrames.

Controlling Flight Directly

This is where the ref addition comes in:

  <Flight interactive ref={flight => (this.flight = flight)}>
    <Flight.Frame duration={300} source interactive showFrames>

Once you can grab an instance of flight you can flight.play() and flight.reset() on demand from your own components and actions.

Here's a full layout:

  <Flight interactive ref={flight => (this.flight = flight)}>
    <Flight.Frame duration={300} source interactive showFrames>

      -- your own DOM / React Components ---
      -- starting position and styles    ---

    </Flight.Frame>

    <Flight.Frame>

      -- your own DOM / React Components ---
      -- ending position and styles    ---

    </Flight.Frame>
  </Flight>

Redux

If you're using Redux, there's basic support for it. Basic in the sense that react-flight is not going to handle deep renders of a stateful app with all its gotchas, so YMMV.

You can check out this Redux example for a fully working solution.

For your app, you can enable Redux support by indicating inclusion of store before using the Flight component:

Flight.contextTypes = {
  store: PropTypes.object,
}

Flight.childContextTypes = {
  ...Flight.childContextTypes,
  store: PropTypes.object,
}

Under the Hood

If you want to hack on react-flight, here are some context to keep in mind.

react-flight does some cool stuff and some DOM-heavy stuff (perhaps less cool?). For the cool stuff, it walks the component tree, makes decisions about what should move where, and builds a clean and nice declarative data structure that represents the way compositions should behave.

Currently it will then hand over this data to a DOM-based adapter, that also uses Velocity.js, so that it would actually orchestrate the animations. This is where you're welcome to plug in your own adapter - another animation engine, React Native, and what not.

Happy hacking!

Contributing

Fork, implement, add tests, pull request, get my everlasting thanks and a respectable place here :).

Thanks:

To all Contributors - you make this happen, thanks!

Copyright

Copyright (c) 2017 Dotan Nahum @jondot. See LICENSE for further details.

More Repositories

1

awesome-react-native

Awesome React Native components, news, tools, and learning material!
JavaScript
33,342
star
2

hygen

The simple, fast, and scalable code generator that lives in your project.
JavaScript
5,610
star
3

graphene

Graphene is a realtime dashboard & graphing toolkit based on D3 and Backbone.
CSS
2,881
star
4

awesome-devenv

A curated list of awesome tools, resources and workflow tips making an awesome development environment.
2,622
star
5

sneakers

A fast background processing framework for Ruby and RabbitMQ
Ruby
2,246
star
6

goweight

A tool to analyze and troubleshoot a Go binary size.
Go
1,687
star
7

rust-how-do-i-start

Hand curated advice and pointers for getting started with Rust
1,055
star
8

ReactNativeKatas

This is a project that lets you participate in a fully-immersive, hands-on, and fun learning experience for React Native.
JavaScript
947
star
9

awesome-weekly

An "awesome" type curated list of quality weekly subscription newsletters from the software world
890
star
10

blade

Better asset workflow for iOS developers. Generate Xcode image catalogs for iOS / OSX app icons, universal images, and more.
Go
818
star
11

groundcontrol

Manage and monitor your Raspberry Pi with ease
Go
769
star
12

rn-snoopy

Snoopy is a profiling tool for React Native, that lets you snoop on the React Native Bridge.
JavaScript
523
star
13

react-native-slowlog

A high-performance timer based profiler for React Native that helps you track big performance problems.
JavaScript
374
star
14

awesome-rust-llm

πŸ¦€ A curated list of Rust tools, libraries, and frameworks for working with LLMs, GPT, AI
220
star
15

crunch

A fast to develop, fast to run, Go based toolkit for ETL and feature extraction on Hadoop.
Go
210
star
16

moxy

The programmable mock proxy
Ruby
120
star
17

webnull

web/null eats your HTTP
CoffeeScript
104
star
18

padrino-warden

A Padrino module that provides authentication for your Padrino application through Warden
Ruby
100
star
19

tauri-tray-app

A Tauri tray app starter πŸ¦€
TypeScript
94
star
20

roundtrip

Simple tracking and metrics for your business processes in real-time
Ruby
89
star
21

awesome-aha

Awesome list for "Aha!" moments related to programming and computer science. Accelerate your learning.
82
star
22

nina

The friendly web microframework that performs!. Nina is a feature complete web microframework for the .Net platform, inspired by Sinatra
C#
70
star
23

frenzy_bunnies

RabbitMQ JRuby based worker framework on top of march_hare (hot_bunnies)
Ruby
70
star
24

redux-stack

Redux Stack is a library that helps you build modular, structured, and cleaner redux apps
JavaScript
67
star
25

storybook-cartesian

Automatically generate stories for all of your component variants
TypeScript
63
star
26

vitals

Flexible StatsD instrumentation for Rails, Rack, Grape and more
Ruby
51
star
27

version_bumper

Bump your versions
Ruby
47
star
28

logbook

Log your memories onto virtual logbooks made of Gists
Ruby
43
star
29

mediumize

Automatically post (and cross-post) your markdown style blog posts to your Medium account from Jekyll, Middleman, Hugo and others.
Ruby
40
star
30

nchurn

.Net based churn analyzer for your build
C#
37
star
31

awesome-designops

Awesome DesignOps is an awesome style list that curates the best design ops news, tools, tutorials, articles and more.
JavaScript
37
star
32

scatter

Ruby
35
star
33

benchmark-ipsa

An iterations per second enhancement to Benchmark that includes memory allocations
Ruby
32
star
34

go-cli-starter

A Go based command line interface starter app (CLI)
Go
32
star
35

fattyproject

Go
32
star
36

react-native-network-boot

An alternative way of bootstrapping development network bundling for React Native
JavaScript
31
star
37

awesome-beginners

A list that curates resources to help you teach your kids, wives, husbands, family or friends how to code
29
star
38

gulpjs-phaser

CSS
29
star
39

xtaskops

Goodies for working with the xtask concept in Rust
Rust
29
star
40

PrimerApp

JavaScript
25
star
41

groundcontrol-ui

JavaScript
25
star
42

attrs-serde

A serialization addon for attrs.
Python
24
star
43

passage

Personal, tiny, flexible, OpenID provider
Ruby
22
star
44

pgpipeline

A Scrapy pipeline module to persist items to a postgres table automatically.
Python
21
star
45

hygen-CRA

Perl 6
21
star
46

redux-duet

Redux action and handlers together, alleviate boilerplate.
JavaScript
20
star
47

langchain-llm-katas

This is a an open-source project designed to help you improve your skills with AI engineering using LLMs and the langchain library
Python
18
star
48

vscode-hygen

This extension bundles Hygen into VSCode and offers seamless code generator functionality right into your editor.
TypeScript
18
star
49

pcwr

Pragmatic Concurrency With Ruby
Ruby
17
star
50

castbox

A chromecast 1.0 emulator
Go
17
star
51

formation

A generic functional middleware infrastructure for Python.
Python
17
star
52

elb-dash

A self-updating ELB status board / dashboard built with React, Coffeescript and Node.js.
CoffeeScript
16
star
53

make-vscode-more-like-vim

Make VSCode more like vim
15
star
54

qtools

qtools are a set of tools to greatly ease your MSMQ operations, monitoring and deployment
C#
15
star
55

hygen-add

hygen-add is one of the tools in the Hygen toolbelt which allows you to add pre-made generator packages to your project.
JavaScript
14
star
56

deep-learning-parameters-cheatsheet

14
star
57

elasticsearch-balance

Visualize the data distribution of your Elastic Search cluster using a Treemap
JavaScript
13
star
58

darkness

JRuby with Swing WriteRoom/Darkroom-like editor.
Java
13
star
59

heatmapdotnet

Heatmap generator for .Net
C#
13
star
60

blade-sample

Swift
13
star
61

rawsort

A simple but powerful RAW photo import tool built to have amazing performance and integrate with photography workflows.
Rust
13
star
62

hypermatch

A fast, sandboxed micro matching engine with serializable rules.
JavaScript
12
star
63

cottonballs

Your own mock, fluffy version of GCM for testing purposes
CoffeeScript
12
star
64

packs

An open-source BoxJS/CSS/Etc clone, suitable for hosting at Heroku
JavaScript
12
star
65

rrgen

Rust
11
star
66

10bisbar

A bitbar plugin that helps you do the math for your 10bis account
Go
11
star
67

primer-bind

Go
11
star
68

dg

Check a folder for dirty git repositories, forgotten branches and commits
Rust
11
star
69

lidar

A take on ThoughtWorks' Radar. You can use this tool and system to make your very own technological Radar.
JavaScript
11
star
70

statsd-stack

A statsd Sprinkle stack
Ruby
11
star
71

react-rust-chrome-starter

Chrome extension template with Rust πŸ¦€ and React using Vite and tailwind
TypeScript
11
star
72

celeste

An all-in-one tool for the repository maintainer.
JavaScript
10
star
73

statsd-cli

Simple Statsd command line interface
Ruby
10
star
74

jill

Jill is your README.md assistant
Ruby
10
star
75

dazzling

Dazzling is a project website generator based on Gatsby and React that's simple, quick, and extensible.
JavaScript
10
star
76

logolang.org

Retro LOGO with a modern twist. Built with Rust+WASM πŸ¦€
TypeScript
10
star
77

firebase-simple-storage

An unofficial Go based client for Firebase storage that preserves security (goes through Firebase and not Google Cloud Storage).
Go
10
star
78

signup

Easy and lightweight signup service
Go
9
star
79

keymaps

Shell
9
star
80

gravy

Sweet sauce for your Gravatars: realtime gravatar manipulation with Node.JS
9
star
81

autobrew

Automate homebrew formula publishing for your CLI tools, regardless of programming language.
Go
9
star
82

webogram

Snap your web pages through Instagram inspired filters. You can use this to generate wallpapers for phone and desktop, icons, and book covers
JavaScript
9
star
83

goddamn-javascript-babel

A zero config package that gives you a bleeding edge Javascript, with the latest proposals including pipe operator foo |> bar, optional chaining foo?.bar, null coalescing foo ?? bar and more.
JavaScript
9
star
84

arper

A network utility and library for discovering network device via ARP scans, including vendor names.
Go
8
star
85

react-native-fs-walker

A React Native file system walker and file tree debugging tool
JavaScript
8
star
86

hypercontroller

A more civilized controller abstraction for TypeScript and Node.js. Hosts libraries for controllers built using hypergen
TypeScript
8
star
87

es-diag

Elastic Search health checks and problem discovery toolkit
Ruby
8
star
88

pocket-emails

A compact tool that sends digest emails from your Pocket account with Mailgun.
JavaScript
8
star
89

dash

Communicate to the mass with Dash on your TV/LCD/Plasma
JavaScript
8
star
90

armor

WIP - a pragmatic Go microservice framwork
Go
8
star
91

react-native-bundles

Hand-picked bundles of React Native libraries and components that go well together for any kind of app
8
star
92

react-redux-classconnect

JavaScript
7
star
93

react-native-group-image

A <GroupImage /> component for React Native. A group image will be responsive towards the amount of images it needs to display
JavaScript
7
star
94

serverless-zen

A serverless starter project focusing on uncompromising local development experience without serverless fatigue.
TypeScript
7
star
95

dotlinker

Use dotrunner and dotlinker to build a fantastically aesthetic macOS dotfiles set up.
Python
7
star
96

dotfiles

configuration files.
Vim Script
7
star
97

outpostapp

Flexible file upload app
JavaScript
7
star
98

appium-solo

Appium simplified: Run E2E tests with a dedicated appium instance per device.
JavaScript
6
star
99

stylomatic

Zero configuration for typescript, react, and more
JavaScript
6
star
100

mongomon

A Python mongodb monitor and profiler for development.
Python
6
star