Giter Site home page Giter Site logo

c8r / kit Goto Github PK

View Code? Open in Web Editor NEW
1.2K 15.0 35.0 35.58 MB

Tools for developing, documenting, and testing React component libraries

Home Page: https://compositor.io/kit

License: MIT License

JavaScript 98.29% CSS 0.13% HTML 1.58%
react components cli development documentation testing ui design-systems styleguide library isolation mdx jsx

kit's Introduction

Compositor Kit

Tools for developing, documenting, and testing React component libraries

  • Zero-config development server
  • Component library mode
  • Utility components for demos and development
  • Reuse component examples for development, documentation, and testing
  • Read more about Kit on our blog

Getting Started

Install the Kit CLI to get started with isolated component development.

npm i -g @compositor/kit-cli

Create an examples folder for your components. This folder can be used for development, documentation, and testing purposes.

An example file should export a single default component for rendering.

// Button.js example
import React from 'react'
import { Button } from '../src'

export default props =>
  <Button>Button</Button>

Be sure to install any local dependencies, including react, and start the development server.

kit examples

The index will show a list of links to each example. Each example will have its own route where it can be viewed in isolation.

Library Mode

To view all examples in library mode with persistent navigation, use the --mode flag.

kit examples --mode library

Utility Components

If you already have an existing development setup, or want to enhance your examples, use the Kit components directly in any React setup.

npm i @compositor/kit

Library

Use the Library, Example, and Detail components to create a custom component library view.

import React from 'react'
import { Library, Example } from '@compositor/kit'
import { Button } from '../src'

export default props =>
  <Library>
    <Example name='Button'>
      <Button>Button</Button>
    </Example>
  </Library>

XRay

Use the XRay component to outline HTML elements and display a grid to help ensure your UI is visually aligned.

import React from 'react'
import { XRay } from '@compositor/kit'
import { Button } from '../src'

export default props =>
  <XRay>
    <Button>Button</Button>
  </XRay>

Cartesian

Use the Cartesian component to render the cartesian product of props.

import React from 'react'
import { Cartesian } from '@compositor/kit'
import Button from '../src/Button'

export default props => (
  <Cartesian
    component={Button}
    m={4}
    fontSize={[1, 2, 3]}
    bg={['blue', 'pink', 'tomato', 'purple']}
    children={['Hello, world!', 'Beep']}
  />
)

Responsive

Use the Responsive component to render components in multiple iframes at different viewport sizes.

import React from 'react'
import { Responsive } from '@compositor/kit'
import PageHeader from '../src/PageHeader'

const example = (
  <Responsive>
    <PageHeader />
  </Responsive>
)

Other Components

See the Kit components package for more components.

Kit Init

Use the kit init command to create a new project based on a growing set of templates.

Utilities

  • kit-snapshot: run Jest snapshot tests for example components

Related

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Made by Compositor | MIT License

kit's People

Contributors

corygibbons avatar danielruf avatar johno avatar jxnblk avatar lachlanjc avatar tbroadley avatar vinspee avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kit's Issues

Fix css errors

~/c/c8r/styleguide rewrite* 1m 30s
❯ rm -rf out && ./dist/cli.js docs/components -d out && superstatic out
 styleguide  @compositor/styleguide
Error parsing component metadata for docs/components/Box.md
Processed docs/components/Box.md
Error parsing component metadata for docs/components/Flex.md
Processed docs/components/Flex.md
Warning: Unsupported vendor-prefixed style property webkitTextDecoration. Did you mean WebkitTextDecoration?
Warning: Unsupported vendor-prefixed style property webkitAppearance. Did you mean WebkitAppearance?
Warning: Unsupported vendor-prefixed style property mozAppearance. Did you mean MozAppearance?
Warning: Unsupported vendor-prefixed style property webkitTextTransform. Did you mean WebkitTextTransform?

./library/NavLink.js:    webkitTextDecoration: 'none',
./library/Button.js:    webkitTextDecoration: 'none',
./library/FormButton.js:    webkitTextDecoration: 'none',

CLI

For more in-depth discussion around #73 and subsequent CLI PRs:

Features

  • scaffolding (with template support for libraries/tests/components/theme)
  • dev server
  • static building
  • publishing
  • design system linting
  • snapshot/render diffing
  • image publishing
  • svg publishing

Arch

The heavy lifting of the CLI should live in logical, separate packages in the packages dir. This will allow for the libraries to be used for other usecases and app contexts. The cli dir in root will server more as the UI for the CLI itself.

Introduce an optional Preview component

Currently this works, however the preview is understandably a bit broken. I'm wondering if perhaps we offer an optional Preview component?:

import {
  Provider,
  Library,
  Example,
  Preview,
  Knobs
} from '@compositor/kit'

import Doc from '../docs/components/Button.md'
import { Button } from './ui'

export default () =>
  <Provider>
    <Library>
      <Library.Nav />
      <Example name='Button'>
        <Preview>
          <Button>Button</Button>
        </Preview>

        <Doc />

        <Knobs>
          <Button size='normal'>Hello</Button>
          <Knobs.Input name='children' />
          <Knobs.Select name='size'>
            <option></option>
            <option>small</option>
            <option>normal</option>
            <option>large</option>
          </Knobs.Select>
        </Knobs>
      </Example>
    </Library>
   </Provider>

In this example, only Preview is rendered in the library view, and the remainder is rendered in the component view.

Combine styleguide and devkit components into a single library

As discussed, it might make sense for styleguide and my idea for a devkit to be combined into a single library of components for development, documentation, and demos.
Some of the components below would also be useful for building features into the apps and for other potential libraries, like an automatic style guide generator.

Some of the potential components I was thinking of include:

  • XRay
  • Library: some storybook like grid of components with detail view
  • Knobs: form for editing props
  • Fetch: render-prop based fetch for prototyping
  • Frame: iframe for actual isolation (should be zoomable)
  • Responsive: multiple iframes at different sizes
  • Matrix: TBD - shows a grid of the same component with different combinations of props
  • Example/LiveEditor*: live-editable code block
  • Docgen*: list out propTypes and description for a component (would need raw source code)
  • ColorPalette*: displays a color palette from a color object or array
  • ColorContrast: display color contrast between two colors
  • Markdown: already exists in markdown
  • Stateful: like refunk but with a render prop
  • Diff: overlays one component on top of the other and uses CSS blend modes to make a sort of visual diff

* already in styleguide

HTML/Atomic CSS mode

Option to output a cut and paste-able version with html + atomic css based on the theme.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.