@audira/carbon-react-native
Version:
Build React Native apps with component and shared patterns using Carbon
82 lines (81 loc) • 2.69 kB
JavaScript
;
import { forwardRef, useContext } from 'react';
import { StyleSheet, Text as Core } from 'react-native';
import { Typography } from '@audira/carbon-react-native-elements';
import { GlobalConfigContext } from "../../_internal/contexts/index.js";
import { CommonStyleSheet, TextStyleSheet } from "../../_internal/style-sheets/index.js";
import { CarbonStyleSheet } from "../../carbon-style-sheet/index.js";
import { ThemeContext } from "../../contexts/index.js";
import { jsx as _jsx } from "react/jsx-runtime";
export const Text = /*#__PURE__*/forwardRef(function Text_({
type,
italic = false,
weight,
style,
dir,
...props
}, ref) {
useContext(ThemeContext);
const globalConfigContext = useContext(GlobalConfigContext);
return /*#__PURE__*/_jsx(Core, {
...props,
dir: dir ?? globalConfigContext.rtl ? 'rtl' : undefined,
style: [carbonStyle.text, getFontStyle(type, italic, weight), globalConfigContext.rtl ? CommonStyleSheet.rtl : undefined, style],
ref: ref
});
});
const mapFamilyStyle = {
100: TextStyleSheet.thin,
200: TextStyleSheet.extralight,
300: TextStyleSheet.light,
400: TextStyleSheet.normal,
500: TextStyleSheet.medium,
600: TextStyleSheet.semibold,
700: TextStyleSheet.bold,
800: TextStyleSheet.bold,
900: TextStyleSheet.bold
},
mapFamilyItalicStyle = {
100: TextStyleSheet.thin_italic,
200: TextStyleSheet.extralight_italic,
300: TextStyleSheet.light_italic,
400: TextStyleSheet.normal_italic,
500: TextStyleSheet.medium_italic,
600: TextStyleSheet.semibold_italic,
700: TextStyleSheet.bold_italic,
800: TextStyleSheet.bold_italic,
900: TextStyleSheet.bold_italic
},
createTypeSetsStyle = italic => {
return StyleSheet.create(Object.entries(Typography.TypeSets).reduce((accumulator, [key_, val]) => {
const key = key_;
accumulator[key] = {
...val,
...(italic ? mapFamilyItalicStyle[val.fontWeight] : mapFamilyStyle[val.fontWeight])
};
return accumulator;
}, {}));
},
carbonStyle = CarbonStyleSheet.create({
text: {
color: CarbonStyleSheet.color.text_primary
}
}),
typeSetsStyle = createTypeSetsStyle(),
typeSetsItalicStyle = createTypeSetsStyle(true);
function getFontStyle(type, italic, overrideWeight) {
if (!type) {
return null;
}
if (italic && overrideWeight) {
return [typeSetsItalicStyle[type], mapFamilyItalicStyle[overrideWeight]];
}
if (italic) {
return typeSetsItalicStyle[type];
}
if (overrideWeight) {
return [typeSetsStyle[type], mapFamilyStyle[overrideWeight]];
}
return typeSetsStyle[type];
}
//# sourceMappingURL=Text.js.map