feat: implement LSD typography and breakpoint utils
This commit is contained in:
parent
dbc7cd476d
commit
debcfc103b
|
@ -0,0 +1,58 @@
|
|||
import {
|
||||
Breakpoints,
|
||||
Theme,
|
||||
TypographyVariants,
|
||||
THEME_BREAKPOINTS,
|
||||
} from '@acid-info/lsd-react'
|
||||
import { css } from '@emotion/react'
|
||||
|
||||
export class LsdUtils {
|
||||
breakpoints = (exclude: Breakpoints[] = []) =>
|
||||
THEME_BREAKPOINTS.filter((b) => !exclude.find((b2) => b2 === b))
|
||||
|
||||
typography = (variant: TypographyVariants | 'subtitle3', important = false) =>
|
||||
variant === 'subtitle3'
|
||||
? `
|
||||
font-size: 12px !important;
|
||||
font-weight: 400 !important;
|
||||
line-height: 16px !important;
|
||||
`
|
||||
: `
|
||||
font-size: var(--lsd-${variant}-fontSize)${important ? '!important' : ''};
|
||||
font-weight: var(--lsd-${variant}-fontWeight)${
|
||||
important ? '!important' : ''
|
||||
};
|
||||
line-height: var(--lsd-${variant}-lineHeight)${
|
||||
important ? '!important' : ''
|
||||
};
|
||||
`
|
||||
|
||||
breakpoint = (
|
||||
theme: Theme,
|
||||
breakpoint: Breakpoints,
|
||||
func: 'exact' | 'up' | 'down' = 'up',
|
||||
) => {
|
||||
const width = theme.breakpoints[breakpoint].width
|
||||
const idx = THEME_BREAKPOINTS.findIndex((b) => b === breakpoint)
|
||||
const next = theme.breakpoints[THEME_BREAKPOINTS[idx + 1]]
|
||||
const min = width
|
||||
const max = next?.width ? next.width - 1 : Number.MAX_SAFE_INTEGER
|
||||
|
||||
let media = `@media `
|
||||
|
||||
if (func === 'up') {
|
||||
media += `(min-width: ${min}px)`
|
||||
} else if (func === 'down') media += `(max-width: ${max}px)`
|
||||
else media += `(min-width: ${min}px) and (max-width: ${max}px)`
|
||||
|
||||
return (styles: any) => {
|
||||
return css`
|
||||
${media} {
|
||||
${styles}
|
||||
}
|
||||
`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const lsdUtils = new LsdUtils()
|
Loading…
Reference in New Issue