import { Property } from 'csstype'; import { colorFormatter, themeFormatter } from '../utils/formatter'; import { cssProperty } from '../utils/style'; import { ColorPropertyTheme, FontFamilyPropertyTheme, FontSizePropertyTheme, FontWeightPropertyTheme, Formatter, LetterSpacingPropertyTheme, LineHeightPropertyTheme, TLength, } from './typings'; export const color = cssProperty(null, colorFormatter('color', 'text-opacity')); export const font = cssProperty('font'); export const fontFamily = cssProperty( 'font-family', themeFormatter('font.families'), ); export const fontFeatureSettings = cssProperty('font-feature-settings'); export const fontKerning = cssProperty('font-kerning'); export const fontLanguageOverride = cssProperty('font-language-override'); export const fontOpticalSizing = cssProperty('font-optical-sizing'); export const fontSize = cssProperty>( 'font-size', themeFormatter('font.sizes'), ); export const fontSizeAdjust = cssProperty('font-size-adjust'); export const fontStretch = cssProperty('font-stetch'); // normal; italic; oblique; oblique XXdeg; export const fontStyle = cssProperty('font-style'); export const fontSynthesis = cssProperty('font-synthesis'); export const fontVariant = cssProperty('font-variant'); export const fontVariantAlternates = cssProperty('font-variant-alternates'); export const fontVariantCaps = cssProperty('font-variant-caps'); export const fontVariantEastAsian = cssProperty('font-variant-east-asian'); export const fontVariantLigatures = cssProperty('font-variant-ligatures'); export const fontVariantNumeric = cssProperty('font-variant-numeric'); export const fontVariantPosition = cssProperty('font-variant-position'); export const fontVariationSettings = cssProperty('font-variation-settings'); export const fontWeight = cssProperty( 'font-weight', themeFormatter('font.weights'), ); export const hyphens = cssProperty('hyphens'); export const letterSpacing = cssProperty>( 'letter-spacing', themeFormatter('font.spacings'), ); export const lineHeight = cssProperty>( 'line-height', themeFormatter('font.lineHeights'), ); export const lineHeightStep = cssProperty>('line-height-step'); export const overflowWrap = cssProperty('overflow-wrap'); // left; center; right; justify export const textAlign = cssProperty('text-align'); export const textDecoration = cssProperty>('text-decoration'); export const textDecorationColor = cssProperty( null, colorFormatter('text-decoration-color'), ); export const textDecorationLine = cssProperty('text-decoration-line'); export const textDecorationStyle = cssProperty('text-decoration-style'); export const textDecorationThickness = cssProperty>('text-decoration-thickness'); export const textEmphasis = cssProperty('text-emphasis'); export const textEmphasisColor = cssProperty(null, colorFormatter('text-emphasis')); export const textEmphasisPosition = cssProperty('text-emphasis-position'); export const textEmphasisStyle = cssProperty('text-emphasis-style'); export const textIdent = cssProperty>('text-ident'); export const textJustify = cssProperty('text-justify'); // float between 0 and 1 export const textOpacity = cssProperty('--text-opacity'); export const textOverflow = cssProperty('text-overflow'); export const textTransform = cssProperty('text-transform'); export const textShadow = cssProperty('text-shadow'); export const textUnderlineOffset = cssProperty('text-underline-offset'); export const textUnderlinePosition = cssProperty('text-underline-position'); export const whiteSpace = cssProperty('white-space'); // normal; words; all; truncate const wordBreakFormatter: Formatter = (value) => { if (value === 'normal') { return 'word-break: normal;overflow-wrap: normal'; } if (value === 'words') { return 'overflow-wrap: break-word'; } if (value === 'all') { return 'word-break: break-all'; } if (value === 'truncate') { return 'overflow: hidden;text-overflow: ellipsis;white-space: nowrap'; } return `word-break: ${value}`; }; export const wordBreak = cssProperty( null, wordBreakFormatter, ); export const wordSpacing = cssProperty>('word-spacing');