Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
@primer/octicons-react
Advanced tools
$ npm install @githubprimer/octicons-react --save
<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:
/**
* 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 you'll probably want to use the icon
prop form.
The @githubprimer/octicons-react
module exports the Octicon
component as
default
and the individual icon symbols as separate named
exports. This
allows you to import only the icons that you need without blowing up your
bundle:
import React from 'react'
import Octicon, {Beaker, Zap} from '@githubprimer/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.
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:
import React from 'react'
import Octicon, {getIconByName} from '@githubprimer/octicons-react'
export default function OcticonByName({name, ...props}) {
return <Octicon {...props} icon={getIconByName(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:
import React from 'react'
import Octicon, {iconsByName} from '@githubprimer/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>
)
}
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
.
import Octicon, {Repo} from '@githubprimer/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 via the ariaLabel
prop (note the
capitalization of L
!).
// Example usage
import Octicon, {Plus} from '@githubprimer/octicons-react'
export default () => (
<button>
<Octicon icon={Plus} ariaLabel="Add new item" /> New
</button>
)
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 |
// Example usage
import Octicon, {LogoGithub} from '@githubprimer/octicons-react'
export default () => (
<h1>
<a href='https://github.com'>
<Octicon icon={LogoGithub} size='large' ariaLabel='GitHub'/>
</a>
</h1>
)
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:
import React from 'react'
import Octicon from '@githubprimer/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} />
}
(c) GitHub, Inc.
When using the GitHub logos, be sure to follow the GitHub logo guidelines.
FAQs
A scalable set of icons handcrafted with <3 by GitHub.
The npm package @primer/octicons-react receives a total of 18,488 weekly downloads. As such, @primer/octicons-react popularity was classified as popular.
We found that @primer/octicons-react demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 15 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.