Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sugarcoat/sugarcoat
Making UI documentation a bit sweeter ✨
https://github.com/sugarcoat/sugarcoat
Last synced: 3 months ago
JSON representation
Making UI documentation a bit sweeter ✨
- Host: GitHub
- URL: https://github.com/sugarcoat/sugarcoat
- Owner: sugarcoat
- License: mit
- Created: 2015-08-19T22:27:21.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-09-29T21:58:08.000Z (over 7 years ago)
- Last Synced: 2024-09-30T06:06:35.198Z (3 months ago)
- Language: JavaScript
- Homepage:
- Size: 7.33 MB
- Stars: 11
- Watchers: 8
- Forks: 3
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Sugarcoat #
[![NPM version](https://badge.fury.io/js/sugarcoat.svg)](https://www.npmjs.com/package/sugarcoat) [![Travis CI Status](https://api.travis-ci.org/sugarcoat/sugarcoat.svg?branch=master)](https://travis-ci.org/sugarcoat/sugarcoat) [![Dependency Status](https://david-dm.org/sugarcoat/sugarcoat.svg)](https://david-dm.org/sugarcoat/sugarcoat)
Making UI documentation a bit sweeter ✨
Sugarcoat was created to enable developers to produce rich UI documentation easily and with minimal up-keep. Sugarcoat works by parsing project files for documentation comments (similar syntax to JavaDoc, JSDoc, etc.) and generates a responsive HTML page (or raw JSON) that is organized and easy to read. Sugarcoat allows developers and designers access to up-to-date previews of UI elements, page components, project specific colors and typography, all in one place.
**Note**: This is still a [work in-progress](https://github.com/sugarcoat/sugarcoat/milestone/1). Please file an issue if you encounter any issues or think a feature should be added.
See our [example project](https://github.com/sugarcoat/sugarcoat-example-project) to get a better view of Sugarcoat up and running.
![Screenshot Colors](screenshots/colors.png)
![Screenshot Variables](screenshots/variables.png)
![Screenshot Components](screenshots/components.png)
# Index #
- [Features](#features)
- [Install](#install)
- [Usage](#usage)
- [Module](#module)
- [CLI](#cli)
- [Configuration](#configuration)
- [`sections` Array](#sections-array)
- [Standardized File Format](#standardized-file-format)
- [Code Comment Syntax](#code-comment-syntax)
- [Example Project](https://github.com/sugarcoat/sugarcoat-example-project)---
# Features✨ #
1. Lives in your project seamlessly
Sugarcoat will never force a file/project structure on you, nor make you create extra files for it to work.
2. [Universal Comment Syntax](#code-comment-syntax)
Sugarcoat parses all **comment blocks** in the file(s) you specify with JSDoc commenting syntax. Or you can specify your own delimiters.
3. [Easy-to-identify component states](#code-comment-syntax)
If you declare CSS modifier states within your comment block, Sugarcoat will highlight and display them in your pattern library for extra readability.
4. [Variables Galore](#type)
Sugarcoat will understand your variables if they're SCSS, LESS, or [CSS Custom Property](https://www.w3.org/TR/css-variables/#defining-variables)
# Install #
```bash
npm install --save sugarcoat
```# Usage #
The Sugarcoat module takes a `config` object and returns a `Promise`. By default, the `resolve` callback provided to the `.then` method receives the expanded `config` object with the parsed sections data. If there are any errors within Sugarcoat, it will reject the promise, passing back the first error as an `Error` object. The user can then handle the error as needed. (It is easiest if a `.catch` is added to end of the sugarcoat promise which will catch any errors.)
```js
const sugarcoat = require( 'sugarcoat' );sugarcoat( config ).catch( errorObj => {
// handle errors here
});// or
sugarcoat( config ).then( data => {
console.log( data );
}).catch( errorObj => {
// handle errors here
});
```# Configuration #
**Simple Example**
```js
{
dest: 'path/to/dest',
sections: [
{
title: 'Base',
files: [
'path/to/styles/typography/*.css'
'path/to/styles/variables/*.css'
]
},
{
title: 'UI',
files: 'path/to/styles/molecules/**/*.css'
}
]
}
```## `dest` ##
- Required: Yes
- Type: `String`
- Default: `null`
- Relative: `process.cwd()`Directory to which Sugarcoat will output the results. This path is relative to `cwd`. Sugarcoat will create any directories that do not already exist. If given the option 'none', Sugarcoat will not output a rendered pattern library.
## `copy` ##
- Required: No
- Type: [Standardized File Format](#standardized-file-format)
- Default: `null`Static asset file(s) to copy to `dest`. If you would like to use Sugarcoat's default pattern library assets, as well as your own, just include `sugarcoat` in the asset array.
## `include` Object ##
CSS and JavaScript to insert into default template. All CSS Rules are prefixed to prevent style bleed.
### `include.css` ###
- Required: No
- Type: [Standardized File Format](#standardized-file-format)
- Default: `null`CSS file(s) you wish Sugarcoat to prefix with `template.selectorPrefix`. The newly prefixed stylesheets will be placed in your document in the order you declare them.
### `include.js` ###
- Required: No
- Type: [Standardized File Format](#standardized-file-format)
- Default: `null`JS Files you wish Sugarcoat to include in the script tag at the footer of your pattern library.
## `display` Object ##
Used to set display values in your template
### `display.graphic` ###
- Required: No
- Type: `String`
- Default: `null`Path to the image to be rendered in the heading of your pattern library.
### `display.title` ###
- Required: No
- Type: `String`
- Default: `Pattern Library`String to be used in the `` tag
### `display.headingText` ###
- Required: No
- Type: `String`
- Default: `null`String to be used in the `
` tag
## `template` Object ##
For advanced configurations and custom templatization.
### `template.partials` ###
- Required: No
- Type: `Object`
- Default: See example belowReplace default partials and register custom partials by providing a path.
**Example:**
```js
partials: {
'head': 'my-custom-partials/head.hbs', // Replaces head partial with your path provided
'nav': '', // Uses Sugarcoat default partial
'footer': '',
'section-color': '',
'section-typography': '',
'section-variable': '',
'section-default': '',
'my-custom-partial': 'my-custom-partials/custom.hbs' // Declares custom partial with your path provided
}
```### `template.helpers` ###
- Required: No
- Type: `Object` containing `Functions`
- Default: `require( 'sugarcoat/lib/handlebars-helpers.js' )`Register custom helpers. Requires a value in `template.layout` and/or `template.partials`
**Example:**
```js
helpers: {
someHelper: fn() {}
},
// or
helpers: require( 'my-big-file-full-of-helpers' ),
```### `template.layout` ###
- Required: No
- Type: `String`
- Default: `main.hbs` (provided by Sugarcoat)Path to the Handlebars layout that will define the layout of the site.
### `template.selectorPrefix` ###
- Required: No
- Type: `String` (CSS selector)
- Default: `.sugar-example`Define the selector to be used to prefix all assets in `copy`. Requires a value in `include.css` and either a value in `template.layout` or `template.partials`.
## `sections` Array ##
Contains an `Array` of [Section Objects](#section-object).
### Section Object ###
Each section object in the sections array is rendered as a category. Each comment block within all files in your section object is rendered as a subcategory. You can modify the `mode` Sugarcoat uses to parse the files in your section object, as well as the `template` it uses to render the parsed data.
### `files` ###
- Required: Yes
- Type: [Standardized File Format](#standardized-file-format)File(s) to parse for [documentation comments](#code-comment-syntax). Sugarcoat uses [globby](https://www.npmjs.com/package/globby) to enable pattern matching.
### `title` ###
- Required: Yes
- Type: `String`Heading of the section.
### `mode` & `template` ###
#### `mode` ####
- Required: No
- Type: `String`
- Default: `undefined`By default, all files are parsed only for their comment blocks. By using `'variable'` mode, Sugarcoat will parse your stylesheet's variable declarations as well. This works with variables prefixed with `$`, `@`, or `--`, depending on the stylesheet's file extension.
#### `template` ####
- Required: No
- Type: `String`
- Default: `'section-default'`The default partial name used to display parsed comments is `section-default`. If `mode` is provided, the default partial name used is `section-variable`. `mode` has two alternate variable renderings available: `section-color` and `section-typography`.
**Relationship Table**
| `mode` | Default `template` | Alternate `template` | Description |
| ---------- | ------------------ | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| undefined | 'section-default' | | Parse comment block only |
| 'variable' | 'section-variable' | | Parse file content for variables and renders a simple table. Inline comments are treated as the variable's description. Groups of variables can be divided in a file by a comment block. |
| 'variable' | | 'section-color' | Same as 'section-variable', except variables are rendered as swatches |
| 'variable' | | 'section-typography' | Same as 'section-variable', except font-family styles are applied to sample text |**Examples**
Parse all variables in my file:
```js
{
title: 'Project Defaults',
files: 'path/to/global/vars.scss',
mode: 'variable'
}
```Parse all variables in my file and render them using the 'section-color' partial:
```js
{
title: 'Colors',
files: 'path/to/global/colors.scss',
type: 'variable',
template: 'section-color'
}
```## Standardized File Format ##
Throughout Sugarcoat we use a standardized format for files. This format allows the user to express a file in three different ways: `String`, `Array`, and `Object`.
### `String` ###
A path or pattern [(Globby)](https://github.com/sindresorhus/globby#globbing-patterns) to a location.
**Example**
```js
files: 'path/to/js/*'
```### `Array` ###
Provide a series of Standardized File Formats ([`Strings`](#string) and/or [`Objects`](#object)).
**Example**
```js
files: [
'path/to/main.js',
{
src: 'path/to/main.js',
options: {
nodir: true
}
}
]
```### `Object` ###
Provide more globbing options in addition to the standardized patterns. See [Globby](https://github.com/sindresorhus/globby).
**Example**
```js
files: {
src: 'path/to/main.js',
options: {
nodir: true
}
}
```# Code Comment Syntax #
```css
/**
* @title Tooltip
* @example
*
* This is a tooltip
*
* @modifier .active enabled class on .tooltip
* @state :focus allows visual contrast for accessibility
*/
```Sugarcoat will parse any tag it finds into a key/value pair. For example: `@tag value`.
The exception being the following three reserved tags that are demonstrated in the above example:
- **`@example`** Takes a single or multiline code example.
- **`@modifier`** Used for a class modifier on a component: `@modifier `.
- **`@state`** Used for state pseudo-classes such as `:hover`: `@state : `.
**HTML**
For html files, Sugarcoat uses the same comment style. Since HTML doesn't support this style you'll need to wrap your documentation comments with an HTML-style comment.
**Comment Example (html)**
```html
I'm a Component!
```