### The Nylas Mail Interface Nylas Mail uses [React](https://facebook.github.io/react/) to create a fast, responsive UI. Packages that want to extend the Nylas Mail interface should use React. Using React's `JSX` is optional, but both `JSX` and `CJSX` (Coffeescript) are available. For a quick introduction to React, take a look at Facebook's [Getting Started with React](https://facebook.github.io/react/docs/getting-started.html). #### React Components Nylas Mail provides a set of core React components you can use in your packages. Many of the standard components listen for key events, include considerations for different platforms, and have extensive CSS. Wrapping standard components makes it easy to build rich interfaces that are consistent with the rest of the Nylas Mail platform. To use a standard component, require it from `ui-components` and use it in your component's `render` method. > Keep in mind that React's Component model is based on composition rather than inheritance. On other platforms, you might subclass `Popover` to create your own custom Popover. In React, you should wrap the standard Popover component in your own component, which provides the Popover with `props` and children to customize it's behavior. Here's a quick look at standard components you can require from `ui-components`: - **Menu**: Allows you to display a list of items consistent with the rest of the Nylas Mail user experience. - **Spinner**: Displays an indeterminate progress indicator centered within it's container. - **Popover**: Component for creating menus and popovers that appear in response to a click and stay open until the user clicks outside them. - **Flexbox**: Component for creating a Flexbox layout. - **RetinaImg**: Replacement for standard `` tags which automatically resolves the best version of the image for the user's display and can apply many image transforms. - **ListTabular**: Component for creating a list of items backed by a paginating ModelView. - **MultiselectList**: Component for creating a list that supports multi-selection. (Internally wraps ListTabular) - **MultiselectActionBar**: Component for creating a contextual toolbar that is activated when the user makes a selection on a ModelView. - **ResizableRegion**: Component that renders it's children inside a resizable region with a draggable handle. - **TokenizingTextField**: Wraps a standard `` and takes function props for tokenizing input values and displaying autocompletion suggestions. - **EventedIFrame**: Replacement for the standard `