💌 A beautiful, fast and fully open source mail client for Mac, Windows and Linux.
Find a file
Evan Morikawa 8799215048 feat(scheduler): Add Overlaid Components
Summary:
SEE ASSOCIATED SUBMODULE DIFF

This enables rich React components (like the Scheduler's `NewEventCard`)
to be used in contenteditables.

We introduce the concept of an "Overlaid Component". These are rendered
React components that are absolutely positioned on top of an equivalent
"Anchor" in a contenteditable.

Inside the contenteditable are special `<img />` tags that have an
id corresponding to a particular rich overlaid component. This way, even
if those img tags are cut and pasted or moved, they'll have a mapping to a
  particular component stored in the `OverlaidComponentStore`. Img tags
  are fairly well handled natively by contenteditable and allow you to
  maniuplate these overlaid components as normal text elements.

The `OverlaidComponentStore` is responsible for listening to and managing
the state of the Anchors and their equivalent OverlaidComponents.

We use a decorator called `ListenToChanges` that allows us to wrap
components to update their corresponding anchor. Since we need to know
about ALL changes that could affect rendered height and width, we need to
use a `MuatationListener` instead of the React render cycle.

This is only the initial diff. There are several TODOs here:
https://paper.dropbox.com/doc/Composer-Overlaid-Components-FoZrF0cFggzSUZirZ9MNo

Test Plan: TODO. Manual

Reviewers: juan, bengotow

Reviewed By: juan

Differential Revision: https://phab.nylas.com/D2946
2016-05-24 15:47:49 -07:00
apm refactor(env): new NylasEnv global 2015-11-17 16:41:20 -08:00
build Fixing small typo. (#2298) 2016-05-24 11:08:40 -07:00
docs fix(db): Remove - from table names, which was a bad idea 2016-04-04 17:44:45 -07:00
dot-nylas cleanup(config): Remove unused features, dependencies 2016-04-26 13:14:06 -07:00
examples rm(mispelled): Stranded package.json file 2016-01-07 14:59:10 -08:00
internal_packages feat(scheduler): Add Overlaid Components 2016-05-24 15:47:49 -07:00
keymaps fix(shortcuts): Add Cmd+[, Cmd+] to Apple Mail preset #1332 2016-05-09 17:34:59 -07:00
menus fix(linux): Add libappindicator1 note, improved View menu 2016-05-15 00:05:25 -05:00
script bump(version): 0.4.41, Electron 1.1.1 2016-05-23 10:34:44 -07:00
spec fix(undo): Move undo/redo to session, properly undo all changes 2016-05-24 11:48:33 -07:00
spec_integration feat(babel6): Initial babel conversion 2016-05-06 11:54:38 -07:00
src feat(scheduler): Add Overlaid Components 2016-05-24 15:47:49 -07:00
static fix(mail-merge): Prevent send button from being pressed multiple times 2016-05-19 16:13:35 -07:00
.eslintrc Update grunt tasks to lint and transpile es6 code using babel 2015-11-06 17:40:42 -08:00
.gitignore fix(build): Trigger travis rebuild 2016-04-24 18:57:55 -05:00
.gitmodules feat(package): fix build-resources-task and move submodule 2016-04-25 16:01:56 -07:00
.travis.yml build(travis): Drop Node 0.12 build, unclear if supported by babel 6 2016-05-13 14:57:37 -07:00
appveyor.yml feat(package): fix build-resources-task and move submodule 2016-04-25 16:01:56 -07:00
CHANGELOG.md fix(send-later): Add isValidDraft to specs 2016-05-19 15:27:43 -07:00
CONFIGURATION.md Update CONFIGURATION.md 2016-05-05 09:45:20 -07:00
CONTRIBUTING.md fix(readme): Add --enable-logging flag 2016-03-22 12:21:25 -07:00
ISSUE_TEMPLATE.md 🎨 Enhance issue template 2016-03-17 19:25:38 -07:00
keymap.json fix(config): Move all reads / writes to the main process 2016-05-16 16:38:46 -05:00
LICENSE.md meta(license): Add GPLv3 License 2015-10-01 10:23:42 -07:00
N1.sh fix(N1.sh): run with --enable-logging (nylas.sh for prod) 2016-05-04 17:24:11 -07:00
package.json bump(version): 0.4.41, Electron 1.1.1 2016-05-23 10:34:44 -07:00
README.md update(readme): Add themes 2016-05-09 17:10:40 -07:00

N1 Logo

N1 Screenshot

N1 is an open-source mail client built on the modern web with Electron, React, and Flux. It is designed to be extensible, so it's easy to create new experiences and workflows around email. N1 is built on the Nylas Sync Engine, which is also open-source free software.

Build Status Slack Invite Button ![GitHub issues On Deck](https://badge.waffle.io/nylas/N1.png?label=on deck&title=On Deck)

Want help build the future of email? Nylas is hiring!

Download N1

You can download compiled versions of N1 for Windows, Mac OS X, and Linux (.deb) from https://nylas.com/N1. You can also build and run N1 on Fedora. A Fedora distribution is coming soon! On Arch Linux, you can install n1 or n1-git from the aur.

Build A Plugin

Plugins lie at the heart of N1 and give it its powerful features. Building your own plugins allows you to integrate the app with other tools, experiment with new workflows, and more. Follow the Getting Started guide to write your first plugin in five minutes. To create your own theme, go to our Theme Starter guide.

If you would like to run the N1 source and contribute, check out our contributing guide.

Plugin List

We're working on building a plugin index that makes it super easy to add them to N1. For now, check out the list below! (Feel free to submit a PR if you build a plugin and want it featured here.)

Bundled Themes

Community Themes

Create your own theme!

Bundled Plugins

Great starting points for creating your own plugins!

Community Plugins

Running Locally

By default, the N1 source points to our hosted version of the Nylas Sync Engine—however, the Sync Engine is open source, and you can run it yourself.

Feature Requests / Plugin Ideas

Have an idea for a package or a feature you'd love to see in N1? Check out our public Trello board to contribute your thoughts and vote on existing ideas.