项目作者: mongodb

项目描述 :
LeafyGreen UI – LeafyGreen's React UI Kit
高级语言: TypeScript
项目地址: git://github.com/mongodb/leafygreen-ui.git
创建时间: 2018-11-08T01:14:44Z
项目社区:https://github.com/mongodb/leafygreen-ui

开源协议:Apache License 2.0

下载


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
  1. npm install -g @lg-tools/cli
  1. Install all, or some LeafyGreen components
  1. lg install
  1. lg install button combobox
  1. Import LeafyGreen components into your project
  1. import Button from '@leafygreen-ui/button';
  2. import { Combobox, ComboboxOptions } from '@leafygreen-ui/combobox';

Without CLI

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

Packages

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

Development

Setup

  1. Node >= 18.0.0 required.

    via homebrew with brew install node

    via nodejs installer

  2. Install PNPM >= 9.15.0.

    PNPM Installation documentation

  3. Clone the repository.

    1. # Navigate to the directory you'd like to clone the repository into
    2. $ cd ~/my/repositories
    3. # Clone the repository.
    4. # 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.

    1. pnpm run init

Storybook

Start up storybook to see all UI components that exist:

  1. pnpm start

Note: Running storybook doesn’t trigger changes in dependencies, only the main component’s — e.g. If you’re looking at Button, and make a change to Lib, you need to rebuild Lib for Storybook to see those changes in Button.

Building Packages

To rebuild all packages:

  1. pnpm build

To rebuild select packages, filter using --filter:

  1. pnpm build --filter="[package]"
  2. // ex. --filter="@leafygreen-ui/hooks"

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:

  1. pnpm 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 pnpm 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 pnpm build in the root of the leafygreen-ui repository and the changes will be visible on your running application.

Creating New Component

Getting Started

To get started quickly and easily run pnpm 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 pnpm run init to link all packages before starting development

Formatting and linting

When you run pnpm fix, we do the following:

  • We run pnpm prettier:fix so that we have consistently formatted code.
  • We run pnpm 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:

  1. pnpm fix

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

  1. pnpm prettier:check

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

  1. pnpm eslint:check

Typechecking

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

  1. pnpm ts

Testing

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

  1. pnpm 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:

  1. pnpm 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.

  1. 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: pnpm changeset pre enter beta (name can be next, beta, alpha, or any other name)
  3. Update package versions pnpm 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 pnpm build <...components>
  6. Publish the prerelease with pnpm 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: pnpm release:site

To deploy to your own mirror of leafygreen-ui

  1. Run pnpm 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.