mirror of
https://github.com/dzeiocom/components.git
synced 2025-04-23 19:32:14 +00:00
Update Text to support more typography
Signed-off-by: Avior <github@avior.me>
This commit is contained in:
parent
bc10816467
commit
91674f6f6d
@ -1,5 +1,7 @@
|
|||||||
.text
|
.text
|
||||||
margin 0
|
margin 0
|
||||||
|
font-size rem(16)
|
||||||
|
font-weight normal
|
||||||
|
|
||||||
+ .text
|
+ .text
|
||||||
margin-top 8px
|
margin-top 8px
|
||||||
@ -10,6 +12,14 @@
|
|||||||
.black
|
.black
|
||||||
color #212121
|
color #212121
|
||||||
|
|
||||||
|
for size in 36 28 24 20 18 16 14
|
||||||
|
.size-{size}
|
||||||
|
font-size rem(size)
|
||||||
|
|
||||||
|
for weight in 'normal' 'bold' 'light'
|
||||||
|
.weight-{weight}
|
||||||
|
font-weight unquote(weight)
|
||||||
|
|
||||||
.align-center
|
.align-center
|
||||||
text-align center
|
text-align center
|
||||||
|
|
||||||
|
@ -1,20 +1,67 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { buildClassName } from '../Util'
|
import { buildClassName } from '../Util'
|
||||||
import css from './Text.module.styl'
|
import css from './Text.module.styl'
|
||||||
|
|
||||||
|
type Types = 'hero' | 'h1' | 'h2' | 'h3' | 'h4' | 'text' | 'light' | 'bold'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
color?: 'black' | 'white'
|
color?: 'black' | 'white'
|
||||||
type?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'em' | 'span' | 'div'
|
type?: Types
|
||||||
|
tag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'em' | 'span' | 'div'
|
||||||
|
weight?: 'normal' | 'bold' | 'light'
|
||||||
|
size?: 36 | 28 | 24 | 20 | 18 | 16 | 14
|
||||||
className?: string
|
className?: string
|
||||||
noDarkTheme?: boolean
|
noDarkTheme?: boolean
|
||||||
align?: 'left' | 'right' | 'center'
|
align?: 'left' | 'right' | 'center'
|
||||||
children: React.ReactNode
|
children: React.ReactNode
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class Text extends React.Component<Props> {
|
const types: Record<Types, {
|
||||||
|
tag?: Props['tag']
|
||||||
|
size?: Props['size']
|
||||||
|
weight?: Props['weight']
|
||||||
|
}> = {
|
||||||
|
hero: {
|
||||||
|
size: 36,
|
||||||
|
weight: 'bold'
|
||||||
|
},
|
||||||
|
h1: {
|
||||||
|
size: 28,
|
||||||
|
weight: 'bold'
|
||||||
|
},
|
||||||
|
h2: {
|
||||||
|
size: 24,
|
||||||
|
weight: 'bold'
|
||||||
|
},
|
||||||
|
h3: {
|
||||||
|
size: 20,
|
||||||
|
weight: 'bold'
|
||||||
|
},
|
||||||
|
h4: {
|
||||||
|
size: 18,
|
||||||
|
weight: 'bold'
|
||||||
|
},
|
||||||
|
text: {},
|
||||||
|
bold: {
|
||||||
|
weight: 'bold'
|
||||||
|
},
|
||||||
|
light: {
|
||||||
|
weight: 'light',
|
||||||
|
size: 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class Text extends React.PureComponent<Props> {
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
|
let data: { weight: Props['weight'], size: Props['size'] } = Object.assign({
|
||||||
|
size: 16,
|
||||||
|
weight: 'normal'
|
||||||
|
}, this.props.type ? types[this.props.type] : {})
|
||||||
const classes = buildClassName(
|
const classes = buildClassName(
|
||||||
css.text,
|
css.text,
|
||||||
|
[css[`weight-${data.weight}`], data.weight !== 'normal'],
|
||||||
|
[css[`size-${data.size}`], data.size !== 16],
|
||||||
[css.white, this.props.color === 'white'],
|
[css.white, this.props.color === 'white'],
|
||||||
[css.black, this.props.color === 'black' || !this.props.color],
|
[css.black, this.props.color === 'black' || !this.props.color],
|
||||||
[css.noDarkTheme, this.props.noDarkTheme],
|
[css.noDarkTheme, this.props.noDarkTheme],
|
||||||
@ -22,10 +69,10 @@ export default class Text extends React.Component<Props> {
|
|||||||
this.props.className
|
this.props.className
|
||||||
)
|
)
|
||||||
|
|
||||||
if (this.props.type === 'em') {
|
if (this.props.tag === 'em') {
|
||||||
return (<p className={classes}><em>{this.props.children}</em></p>)
|
return (<p className={classes}><em>{this.props.children}</em></p>)
|
||||||
}
|
}
|
||||||
|
|
||||||
return React.createElement(this.props.type || 'p', {className: classes, children: this.props.children})
|
return React.createElement(this.props.tag || 'p', {className: classes, children: this.props.children})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user