Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

React Octicons! #222

Merged
merged 99 commits into from
Jun 29, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
542d2f6
First commit on a react-octicons component
jonrohan Feb 21, 2018
2cb57f7
Renaming for npmjs
jonrohan Feb 21, 2018
b5a9afd
Updating sheild location
jonrohan Feb 21, 2018
0cccc4f
remove clasee
jonrohan Feb 21, 2018
a0d68d5
building babel dist
jonrohan Feb 22, 2018
d7728f2
Outputting to build instead
jonrohan Feb 22, 2018
36e3e4b
Setting up linting
jonrohan Feb 22, 2018
581a4f2
github-lint?
jonrohan Feb 22, 2018
60d21a7
1.1.0
jonrohan Feb 22, 2018
9d94633
1.1.0
jonrohan Feb 22, 2018
8f120ac
Be explicit so that it's not mixed up with index.scss
jonrohan Feb 22, 2018
20170b6
Making the sizing stricter
jonrohan Feb 23, 2018
11933d8
Large
jonrohan Feb 23, 2018
b41121c
Adding alignment options
jonrohan Feb 23, 2018
0071790
Merge branch 'master' into react_octicons
jonrohan Mar 24, 2018
ba46dc4
Removing lint from test
jonrohan Mar 24, 2018
c72f20b
Renaming
jonrohan Mar 26, 2018
a8a7a07
Updating react package to build components
jonrohan Mar 27, 2018
571e219
Revert package.json
jonrohan Mar 27, 2018
1b30538
Cleaning lint
jonrohan Mar 27, 2018
d2e5c24
Don't need this in files
jonrohan Mar 27, 2018
f962884
Importing separately for all vs specific octicons
jonrohan Mar 27, 2018
f0b872f
Adding named.js to the package files
jonrohan Mar 27, 2018
cfdb19f
slimmer icons, bulkier <Octicon>
shawnbot Jun 8, 2018
88e952f
UpperCase all the things
shawnbot Jun 8, 2018
661d320
export all the icons???
shawnbot Jun 8, 2018
eb64b31
Merge remote-tracking branch 'origin/master' into reocticons
shawnbot Jun 8, 2018
3a8157f
icon output fix, viewBox
shawnbot Jun 8, 2018
6f811ae
add parcel for testing
shawnbot Jun 8, 2018
98826f5
ignore stuff
shawnbot Jun 8, 2018
6a3c8ec
clarify
shawnbot Jun 8, 2018
4ecbf0e
use next.js
shawnbot Jun 8, 2018
635b444
make a table
shawnbot Jun 8, 2018
32a0078
add pages to files list
shawnbot Jun 8, 2018
5c07b32
reasonable FIGMA_DOMAIN default; bail on missing FIGMA_TOKEN
shawnbot Jun 25, 2018
e030c2c
remove unneeded rubocop:disable
shawnbot Jun 25, 2018
2cf602c
tidy
shawnbot Jun 25, 2018
85a6fe2
add icons/all endpoint for named icons
shawnbot Jun 25, 2018
f587796
clean up deps, add jest
shawnbot Jun 25, 2018
62487aa
add basic tests
shawnbot Jun 25, 2018
e7bdde9
add .babelrc that works with jest and next
shawnbot Jun 25, 2018
8404d60
add getIcon(name) example to demo app
shawnbot Jun 25, 2018
4d6dc42
start fleshing out new docs
shawnbot Jun 25, 2018
c86a792
add "small" size
shawnbot Jun 25, 2018
5adf596
add iconsByName object export to icons/all
shawnbot Jun 25, 2018
59e2c22
moar docs
shawnbot Jun 25, 2018
7df502a
add tree-shaking link
shawnbot Jun 25, 2018
7ab2d07
tidy up icon docs
shawnbot Jun 25, 2018
39df26a
updating props, examples
shawnbot Jun 25, 2018
aa3e559
refactor all icons exports
shawnbot Jun 26, 2018
0386dc2
update docs for new all icons exports
shawnbot Jun 26, 2018
5173a54
nix "ES6"
shawnbot Jun 26, 2018
5f23980
update the "about" bit
shawnbot Jun 26, 2018
91e7dfe
"Octicons for React" sounds better
shawnbot Jun 26, 2018
c996c55
linty
shawnbot Jun 26, 2018
4666318
add bit on custom icons, tweak Octicon language
shawnbot Jun 26, 2018
de30402
better explain the icon usage options
shawnbot Jun 26, 2018
ff8c997
v0.1.0
shawnbot Jun 27, 2018
fae9547
move script/build.js => script/build
shawnbot Jun 27, 2018
959f0b7
add comma in "GitHub, Inc."
shawnbot Jun 27, 2018
c1db936
update build script name; add preversion run-script
shawnbot Jun 27, 2018
131bb28
move react into peer and dev dependencies
shawnbot Jun 27, 2018
3e8f487
suggest node 8+
shawnbot Jun 27, 2018
9267ee9
move script/build => script/build.js
shawnbot Jun 27, 2018
4f4a9df
add eslint, tidy package.json, build scripts
shawnbot Jun 27, 2018
44ee3c6
add eslint configs
shawnbot Jun 27, 2018
babe5c4
tidy up icon builds
shawnbot Jun 27, 2018
c3e4956
remove un-applied quotes rule
shawnbot Jun 27, 2018
35029db
don't lint generated .js files
shawnbot Jun 27, 2018
e3c85df
eslint --fix
shawnbot Jun 27, 2018
6b9c1f9
add lint script
shawnbot Jun 27, 2018
0bec8ae
lint before testing
shawnbot Jun 27, 2018
970a58c
lint tests
shawnbot Jun 27, 2018
b57bf2d
doh
shawnbot Jun 27, 2018
f78cf21
add snapshot to Octicon test, hush console.error()
shawnbot Jun 27, 2018
e494f3d
add aria-hidden="true", user-select: none
shawnbot Jun 27, 2018
ea74679
try rollup?
shawnbot Jun 28, 2018
7115814
update version to match
shawnbot Jun 28, 2018
8351762
tidy up, improve Octicon tests
shawnbot Jun 28, 2018
02a007a
don't set 'module' in package.json
shawnbot Jun 28, 2018
4fce348
do sizing right, moar tests
shawnbot Jun 28, 2018
10a3731
move everything into src/
shawnbot Jun 28, 2018
5be4bd2
update rollup config
shawnbot Jun 28, 2018
c068058
write icons to src/icons
shawnbot Jun 28, 2018
e8e8929
remove lib/octicons_react/named.js from /.gitignore
shawnbot Jun 28, 2018
63ffd9d
wrapping
shawnbot Jun 28, 2018
fc73084
React (not React.js)
shawnbot Jun 28, 2018
d80832b
add stage-0, rename next env to "production"
shawnbot Jun 29, 2018
d23a00c
use .npmignore instead of files; downgrade next, install stage-0
shawnbot Jun 29, 2018
9d8aca0
refactor rollup config, output ESM + UMD
shawnbot Jun 29, 2018
ebbe36b
ignore dist/
shawnbot Jun 29, 2018
8269535
show all the octicons!
shawnbot Jun 29, 2018
db11ac7
tidy up rollup config, use env preset
shawnbot Jun 29, 2018
7c9d61d
nix es2015 preset (always use env!)
shawnbot Jun 29, 2018
b8f4a03
oops
shawnbot Jun 29, 2018
34a532e
simplify rollup config
shawnbot Jun 29, 2018
b014412
nix prepare run-script
shawnbot Jun 29, 2018
a008e25
use some primer components
shawnbot Jun 29, 2018
b61e03c
clean up build run-script logic, remove pages/ from .npmignore
shawnbot Jun 29, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,15 @@ The octicons node.js library is the main JavaScript library. With [a JavaScript
| Package | Version |
|---|---|
| **[octicons](/lib/octicons_node)** <br />Node.js package with Javascript API | [![npm version](https://img.shields.io/npm/v/octicons.svg)](https://www.npmjs.org/package/octicons) |
| **[@github/octicons-react](/lib/octicons_react)** <br />React octicons components | [![npm version](https://img.shields.io/npm/v/%40github%2Focticons-react.svg)](https://www.npmjs.org/package/%40github%2Focticons-react) |

### Ruby

| Package | Version |
|---|---|
| **[octicons](/lib/octicons_gem)** <br />Ruby gem with Ruby API | [![Gem version](https://img.shields.io/gem/v/octicons.svg)](https://rubygems.org/gems/octicons) |
| [octicons_helper](/lib/octicons_helper)<br />Rails helper for using octicons| [![Gem version](https://img.shields.io/gem/v/octicons_helper.svg)](https://rubygems.org/gems/octicons_helper) |
| [jekyll-octicons](/lib/jekyll-octicons)<br />Jekyll plugin for using octicons | [![Gem version](https://img.shields.io/gem/v/jekyll-octicons.svg)](https://rubygems.org/gems/jekyll-octicons) |
| [jekyll-octicons](/lib/octicons_jekyll)<br />Jekyll plugin for using octicons | [![Gem version](https://img.shields.io/gem/v/jekyll-octicons.svg)](https://rubygems.org/gems/jekyll-octicons) |

## License

Expand Down
3 changes: 2 additions & 1 deletion lerna.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"lib/octicons_node",
"lib/octicons_gem",
"lib/octicons_helper",
"lib/jekyll-octicons"
"lib/octicons_jekyll",
"lib/octicons_react"
],
"version": "7.3.0"
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# rubocop:disable Naming/FileName
require "octicons"
require "jekyll-octicons/version"
require "liquid"
Expand Down
File renamed without changes.
File renamed without changes.
8 changes: 8 additions & 0 deletions lib/octicons_react/.babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"presets": ["env", "stage-0", "react"],
"env": {
"production": {
"presets": ["next/babel"]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is used when we call NODE_ENV=production next in the start run-script.

}
}
}
1 change: 1 addition & 0 deletions lib/octicons_react/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
src/icons/*.js
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't lint the generated files. 🙈

9 changes: 9 additions & 0 deletions lib/octicons_react/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"extends": [
"plugin:github/recommended",
"plugin:github/es6",
"plugin:github/react"
],
"rules": {
}
}
3 changes: 3 additions & 0 deletions lib/octicons_react/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.cache
.next
dist/
9 changes: 9 additions & 0 deletions lib/octicons_react/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
*.config.js
.*.sw?
.*rc
.cache
.eslint*
.gitignore
.next
script
src
1 change: 1 addition & 0 deletions lib/octicons_react/.nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
8
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for development. I've added the equivalent to engines.node in the package.json as well.

21 changes: 21 additions & 0 deletions lib/octicons_react/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2018 GitHub Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
200 changes: 200 additions & 0 deletions lib/octicons_react/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
# GitHub Octicons React Component

[![npm version](https://img.shields.io/npm/v/%40github%2Focticons-react.svg)](https://www.npmjs.org/package/%40github%2Focticons-react)
[![Build Status](https://travis-ci.org/primer/octicons.svg?branch=master)](https://travis-ci.org/primer/octicons)

> [Octicons] for React

## Install

```
$ npm install @github/octicons-react --save
```

## Usage

### `<Octicon>`
The `<Octicon>` component is really just the "shell" of an Octicon that renders
the `<svg>` element and all of its attributes. To render a specific icon, you
must pass it either via the `icon` prop, or as the only child:

```jsx
/**
* The prop form is shorter, but doesn't allow you to pass icon props.
*/
<Octicon icon={Icon} />

/**
* The child form allows you to pass props.
*/
<Octicon><Icon x={10}/></Octicon>
```

Note that none of our builtin icons take props, so unless you're creating
[custom icons](#custom-icons) you'll probably want to use the `icon` prop form.

### Icons
The `@github/octicons-react` module exports the `Octicon` component as
`default` and the individual icon symbols as separate [named
exports](https://ponyfoo.com/articles/es6-modules-in-depth#named-exports). This
allows you to import only the icons that you need without blowing up your
bundle:

```jsx
import React from 'react'
import Octicon, {Beaker, Zap} from '@github/octicons-react'

export default function Icon({boom}) {
return <Octicon icon={boom ? Zap : Beaker}/>
}
```

If you were to compile this example with a tool that supports [tree-shaking][]
(such as Webpack, Rollup, or Parcel) the resulting bundle would only include
the "zap" and "beaker" icons.

### All icons
If you don't mind your bundle being huge or you need to be able to render
arbitrarily named icons at runtime, you can import either of the following
named exports:

#### `getIconByName()`
The `getIconByName` export is a function that takes a lowercase octicon name
(such as `arrow-right`) and returns the corresponding icon class. Using this
helper, it's possible to create an Octicon class that takes a `name` prop and
resolves it to the right component:

```jsx
import React from 'react'
import Octicon, {getIconByName} from '@github/octicons-react'

export default function OcticonByName({name, ...props}) {
return <Octicon {...props} icon={getIcon(name)} />
}
```

#### `iconsByName`
The `iconsByName` export is an object that maps keys (such as `arrow-right` or
`zap`) to component functions, which you can use to generate listings of all
the octicons:

```jsx
import React from 'react'
import Octicon, {iconsByName} from '@github/octicons-react'

export default function OcticonsList() {
return (
<ul>
{Object.keys(iconsByName).map(key => (
<li key={key}>
<tt>{key}</tt>
<Octicon icon={iconsByName[key]}/>
</li>
))}
</ul>
)
}
```

### Vertical alignment
By default the octicons have `vertical-align: text-bottom;` applied as inline
styles. You can change the alignment via the `verticalAlign` prop, which can be
either `middle`, `text-bottom`, `text-top`, or `top`.

```js
import Octicon, {Repo} from '@github/octicons-react'

export default () => (
<h1>
<Octicon icon={Repo} size='large' verticalAlign='middle' /> github/github
</h1>
)
```


### `ariaLabel`
You have the option of adding accessibility information to the icon with the
[`aria-label` attribute][aria-label] via the `ariaLabel` prop (note the
capitalization of `L`!).

```js
// Example usage
import Octicon, {Plus} from '@github/octicons-react'

export default () => (
<button>
<Octicon icon={Plus} ariaLabel="Add new item" /> New
</button>
)
```


### Sizes
The `size` prop takes `small`, `medium`, and `large` values that can be used to
render octicons at standard sizes:

| Prop | Rendered Size |
| :- | :- |
| `size='small'` | 16px height by `computed` width |
| `size='medium'` | 32px height by `computed` width |
| `size='large'` | 64px height by `computed` width |

```js
// Example usage
import Octicon, {LogoGithub} from '@github/octicons-react'

export default () => (
<h1>
<a href='https://github.com'>
<Octicon icon={LogoGithub} size='large' ariaLabel='GitHub'/>
</a>
</h1>
)
```


## Custom icons
Each of our icon components is really just a function that renders its SVG
`<path>`. To accommodate icons varying aspect ratios, the `Octicon` component
determines the `viewBox` of the `<svg>` element by first looking for a `size`
array on the icon component class. For instance, if you wanted to create a
custom icon that consisted of three circles side by side, you could do this:

```jsx
import React from 'react'
import Octicon from '@github/octicons-react'

function CirclesIcon() {
return (
<React.Fragment>
<circle r={5} cx={5} cy={5}/>
<circle r={5} cx={15} cy={5}/>
<circle r={5} cx={25} cy={5}/>
</React.Fragment>
)
}

CirclesIcon.size = [30, 10]

export default CirclesOcticon(props) {
return <Octicon {...props} icon={CirclesIcon} />
}
```


## License

(c) GitHub, Inc.

When using the GitHub logos, be sure to follow the [GitHub logo
guidelines](https://github.com/logos).

[MIT](./LICENSE)

[octicons]: https://octicons.github.com/
[primer]: https://github.com/primer/primer
[docs]: http://primercss.io/
[npm]: https://www.npmjs.com/
[install-npm]: https://docs.npmjs.com/getting-started/installing-node
[tree-shaking]: https://developer.mozilla.org/en-US/docs/Glossary/Tree_shaking
[aria-label]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute
58 changes: 58 additions & 0 deletions lib/octicons_react/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
{
"name": "@github/octicons-react",
"version": "7.3.0",
"description": "A scalable set of icons handcrafted with <3 by GitHub.",
"homepage": "https://octicons.github.com",
"author": "GitHub, Inc.",
"license": "MIT",
"main": "dist/index.umd.js",
"module": "dist/index.esm.js",
"repository": "primer/octicons",
"scripts": {
"pretest": "npm run lint -s",
"test": "jest",
"start": "NODE_ENV=production next",
"lint": "eslint src script",
"prepare": "script/build.js && npm -s run rollup",
"prepublishOnly": "../../script/notify pending",
"preversion": "npm -s run prepare",
"publish": "../../script/notify success",
"rollup": "rollup -c"
},
"keywords": [
"GitHub",
"icons",
"svg",
"octicons",
"react",
"primer"
],
"dependencies": {
"prop-types": "^15.6.1"
},
"devDependencies": {
"babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"eslint": "^5.0.1",
"eslint-plugin-github": "^1.1.0",
"eslint-plugin-jest": "^21.17.0",
"fs-extra": "^6.0.1",
"jest": "^23.2.0",
"next": "^5.1.0",
"octicons": "7.2.0",
"primer-react": "0.0.6-alpha.1",
"react": "^16.4.0",
"react-dom": "^16.4.1",
"react-test-renderer": "^16.4.1",
"rollup": "^0.62.0",
"rollup-plugin-babel": "^3.0.5",
"rollup-plugin-commonjs": "^9.1.3"
},
"peerDependencies": {
"react": ">=15"
},
"engines": {
"node": ">=8"
}
}
17 changes: 17 additions & 0 deletions lib/octicons_react/pages/_document.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import Document, { Head, Main, NextScript } from 'next/document'

export default class PrimerDocument extends Document {
render() {
return (
<html lang='en'>
<Head>
<link rel='stylesheet' href='https://unpkg.com/primer/build/build.css' />
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
)
}
}
Loading