Skip to content

mongodb/leafygreen-ui

Repository files navigation

LeafyGreen UI

A library of React components, CSS patterns, and CLI tools for MongoDB's LeafyGreen Design System.

mongodb.design

Storybook

Release License

Getting Started

With LeafyGreen CLI

  1. Create or open a React project
  2. Install the LeafyGreen CLI
npm install -g @lg-tools/cli
  1. Install all, or some LeafyGreen components
lg install
lg install button combobox
  1. Import LeafyGreen components into your project
import Button from '@leafygreen-ui/button';
import { Combobox, ComboboxOptions } from '@leafygreen-ui/combobox';

Without CLI

  1. Create or open a React project
  2. Install individual LeafyGreen components using npm or yarn
yarn add @leafygreen-ui/button
  1. Import LeafyGreen components into your project
import Button from '@leafygreen-ui/button';

Packages

Package Latest Downloads Docs
@leafygreen-ui/a11y version downloads Docs
@leafygreen-ui/badge version downloads Docs
@leafygreen-ui/banner version downloads Docs
@leafygreen-ui/box version downloads Docs
@leafygreen-ui/button version downloads Docs
@leafygreen-ui/callout version downloads Docs
@leafygreen-ui/card version downloads Docs
@leafygreen-ui/checkbox version downloads Docs
@leafygreen-ui/chip version downloads Docs
@leafygreen-ui/code version downloads Docs
@leafygreen-ui/combobox version downloads Docs
@leafygreen-ui/confirmation-modal version downloads Docs
@leafygreen-ui/copyable version downloads Docs
@leafygreen-ui/date-picker version downloads Docs
@leafygreen-ui/date-utils version downloads Docs
@leafygreen-ui/descendants version downloads Docs
@leafygreen-ui/emotion version downloads Docs
@leafygreen-ui/empty-state version downloads Docs
@leafygreen-ui/expandable-card version downloads Docs
@leafygreen-ui/form-field version downloads Docs
@leafygreen-ui/form-footer version downloads Docs
@leafygreen-ui/guide-cue version downloads Docs
@leafygreen-ui/hooks version downloads Docs
@leafygreen-ui/icon version downloads Docs
@leafygreen-ui/icon-button version downloads Docs
@leafygreen-ui/info-sprinkle version downloads Docs
@leafygreen-ui/inline-definition version downloads Docs
@leafygreen-ui/input-option version downloads Docs
@leafygreen-ui/leafygreen-provider version downloads Docs
@leafygreen-ui/lib version downloads Docs
@leafygreen-ui/loading-indicator version downloads Docs
@leafygreen-ui/logo version downloads Docs
@leafygreen-ui/marketing-modal version downloads Docs
@leafygreen-ui/menu version downloads Docs
@leafygreen-ui/modal version downloads Docs
@leafygreen-ui/number-input version downloads Docs
@leafygreen-ui/pagination version downloads Docs
@leafygreen-ui/palette version downloads Docs
@leafygreen-ui/password-input version downloads Docs
@leafygreen-ui/pipeline version downloads Docs
@leafygreen-ui/polymorphic version downloads Docs
@leafygreen-ui/popover version downloads Docs
@leafygreen-ui/portal version downloads Docs
@leafygreen-ui/radio-box-group version downloads Docs
@leafygreen-ui/radio-group version downloads Docs
@leafygreen-ui/ripple version downloads Docs
@leafygreen-ui/search-input version downloads Docs
@leafygreen-ui/segmented-control version downloads Docs
@leafygreen-ui/select version downloads Docs
@leafygreen-ui/side-nav version downloads Docs
@leafygreen-ui/skeleton-loader version downloads Docs
@leafygreen-ui/split-button version downloads Docs
@leafygreen-ui/stepper version downloads Docs
@leafygreen-ui/table version downloads Docs
@leafygreen-ui/tabs version downloads Docs
@leafygreen-ui/testing-lib version downloads Docs
@leafygreen-ui/text-area version downloads Docs
@leafygreen-ui/text-input version downloads Docs
@leafygreen-ui/toast version downloads Docs
@leafygreen-ui/toggle version downloads Docs
@leafygreen-ui/tokens version downloads Docs
@leafygreen-ui/tooltip version downloads Docs
@leafygreen-ui/typography version downloads Docs
@lg-chat/avatar version downloads Docs
@lg-chat/chat-disclaimer version downloads Docs
@lg-chat/chat-window version downloads Docs
@lg-chat/fixed-chat-window version downloads Docs
@lg-chat/input-bar version downloads Docs
@lg-chat/leafygreen-chat-provider version downloads Docs
@lg-chat/lg-markdown version downloads Docs
@lg-chat/message version downloads Docs
@lg-chat/message-feed version downloads Docs
@lg-chat/message-feedback version downloads Docs
@lg-chat/message-prompts version downloads Docs
@lg-chat/message-rating version downloads Docs
@lg-chat/title-bar version downloads Docs
@lg-tools/build version downloads Docs
@lg-tools/cli version downloads Docs
@lg-tools/create version downloads Docs
@lg-tools/install version downloads Docs
@lg-tools/link version downloads Docs
@lg-tools/lint version downloads Docs
@lg-tools/meta version downloads Docs
@lg-tools/slackbot version downloads Docs
@lg-tools/storybook-addon version downloads Docs
@lg-tools/storybook-decorators version downloads Docs
@lg-tools/storybook-utils version downloads Docs
@lg-tools/test version downloads Docs
@lg-tools/test-harnesses version downloads Docs
@lg-tools/update version downloads Docs
@lg-tools/validate version downloads Docs

Developer Setup

  1. Node >= 16.20.0 required.

    via homebrew with brew install node

    via nodejs installer

  2. Install Yarn >= 1.20.0.

    Yarn Installation documentation

  3. Clone the repository.

    # Navigate to the directory you'd like to clone the repository into
    $ cd ~/my/repositories
    
    # Clone the repository.
    
    # We recommend installing using the SSH address rather than the HTTPS one to make authentication easier for you. To set up SSH authentication with GitHub, see their guide: https://docs.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account
  4. Install dependencies and link packages.

    yarn run init

Use yarn build to rebuild all packages. Pass in a specific package name to rebuild select packages:

yarn build button icon

Additionally, pass in the --watch flag to rebuild packages on change.

Development

  1. Start up storybook to see all UI components that exist.

    yarn start

Development within an Application

To actively develop leafygreen-ui components within an application, the following script will link all leafygreen-ui components within your application to the local leafygreen-ui repository.

This will allow you to make changes to your local repository of leafygreen-ui and see those changes immediately reflected within your running application. This allows you to develop both in isolation (within leafygreen-ui) and in the context of your application.

To do this, clone this repository and navigate to the root directory (where package.json is located), then run the following:

yarn run link -- ${PATH_TO_APPLICATION}

The script does several things in order:

  1. This builds every leafygreen-ui component so they are ready to be linked

  2. It scans your application for any installed leafygreen-ui components in your node_modules/@leafygreen-ui folder. NOTE: If the package is new and unpublished/not installed, you will need to create a directory for the new component within your application inside node_modules/@leafygreen-ui before running this command.

  3. If any leafygreen-ui components are found then the script uses yarn link to link every node_modules/@leafygreen-ui module to your local leafygreen-ui repository.

After the script completes, you can make changes directly to the component in your local leafygreen-ui repository. Once you do this, run yarn build in the root of the leafygreen-ui repository and the changes will be visible on your running application.

create-leafygreen-app

An externally maintained script to bootstrap a React app with all Leafygreen UI components.

Create a new React app with Leafygreen UI components pre-installed

npx create-leafygreen-app@latest <project-name>

Create a new Next app

npx create-leafygreen-app@latest --next <project-name>

Install all Leafygreen UI components to an existing project

npx create-leafygreen-app@latest --packages-only

Creating New Component

Getting Started

To get started quickly and easily run yarn create-package my-new-package. When you run this command, we create a directory containing all of the boilerplate code that you'll need to start developing your new Component.

Note: it's important to follow the kebab-casing convention described above.

  • Add the new component to build.tsconfig.json
  • If you are using any leafygreen-ui dependencies in your new component, add the dependency to the component directory's tsconfig.json.
  • Run yarn run init to link all packages before starting development

Formatting and linting

When you run yarn fix, we do the following:

  • We run yarn prettier:fix so that we have consistently formatted code.
  • We run yarn eslint:fix to catch any syntax errors, unused variables, and any other easy-to-catch issues.

To fix all files in the repository, run the following:

yarn fix

To check if any files need formatting without automatically formatting them, run the following:

yarn prettier:check

To run linting without automatically fixing issues, run the following:

yarn eslint:check

Typechecking

To run typechecking without compiling the code, run the following:

yarn ts

Testing

To run the unit tests for our components, run the following:

yarn test

Committing

When making a PR that contains changes that should be included in a package's changelog, be sure to do so by running:

yarn changeset

This will generate a changes.json file, keeping track of version upgrades and update descriptions. We follow semver conventions for versioning, so each change will either be major, minor, or patch.

Make sure that the PR includes the changes made by running this command.

Publishing

  1. Merge the automatically generated Version Packages PR that will contain appropriate version bumps and changelog documentation.

  2. Push the tags from the release up to Github.

git push --follow-tags

Publishing Pre-releases

Read more in-depth pre-release guides here

Pre-releases let you publish an alpha/beta/next version of a component, allowing developers to test a component before fully releasing a component.

Let's imagine we want to publish a beta release of some component. Our work is being done on a branch called new-feature

  1. Create a new branch off your component branch git checkout -b pre-release
    • this makes sure your package updates stay independent
  2. Enter pre-release mode: yarn changeset pre enter beta (name can be next, beta, alpha, or any other name)
  3. Update package versions yarn changeset version
    • This will update any packages with existing changeset files to version X.Y.Z-beta.0 (or whatever name you used)
  4. Commit these updates git commit -am "Prerelease version packages"
  5. Build the component(s) you're pre-releasing yarn build <...components>
  6. Publish the prerelease with yarn changeset publish

Any new work you do should be done in the original (new-feature) branch. To publish a new pre-release version, pull the changes from new-feature into branch pre-release, and follow steps 3-5.

When new-feature is merged into main, you can safely delete the pre-release branch

Deploy gh-pages

You can deploy a static build of our Storybook site to gh-pages from the main branch.

  1. First be sure you've built a static version of Storybook with the script: build-storybook
  2. Then deploy to gh-pages: yarn release:site

To deploy to your own mirror of leafygreen-ui

  1. Run yarn demo:site [your_github_username].
  2. If you haven't built a static version of Storybook yet, you will be prompted to do so.
  3. You will be asked for confirmation before Storybook is published.

License

The source files in this repository are made available under the terms of the Apache License, version 2.0.