1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

add text directions (#16901)

* add text directions

* add text direction test

Co-authored-by: Nidhi Kumari <nidhi.kumari@consensys.net>
This commit is contained in:
Garrett Bear 2022-12-15 10:49:47 -08:00 committed by GitHub
parent 88af4b3c36
commit 4ba081a096
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 84 additions and 10 deletions

View File

@ -18,7 +18,7 @@ export { Label } from './label';
export { PickerNetwork } from './picker-network'; export { PickerNetwork } from './picker-network';
export { Tag } from './tag'; export { Tag } from './tag';
export { TagUrl } from './tag-url'; export { TagUrl } from './tag-url';
export { Text, TEXT_VARIANTS } from './text'; export { Text, TEXT_VARIANTS, TEXT_DIRECTIONS } from './text';
export { TextField, TEXT_FIELD_TYPES, TEXT_FIELD_SIZES } from './text-field'; export { TextField, TEXT_FIELD_TYPES, TEXT_FIELD_SIZES } from './text-field';
export { export {
TextFieldBase, TextFieldBase,

View File

@ -66,34 +66,34 @@ import { COLORS } from '../../../helpers/constants/design-system';
<Text color={COLORS.TEXT_MUTED}> <Text color={COLORS.TEXT_MUTED}>
text-muted text-muted
</Text> </Text>
<Text color={COLORS.OVERLAY_INVERSE} backgroundColor:{COLORS.OVERLAY_DEFAULT}> <Text color={COLORS.OVERLAY_INVERSE} backgroundColor={COLORS.OVERLAY_DEFAULT}>
overlay-inverse overlay-inverse
</Text> </Text>
<Text color={COLORS.PRIMARY_DEFAULT}> <Text color={COLORS.PRIMARY_DEFAULT}>
primary-default primary-default
</Text> </Text>
<Text color={COLORS.PRIMARY_INVERSE} backgroundColor:{COLORS.PRIMARY_DEFAULT}> <Text color={COLORS.PRIMARY_INVERSE} backgroundColor={COLORS.PRIMARY_DEFAULT}>
primary-inverse primary-inverse
</Text> </Text>
<Text color={COLORS.ERROR_DEFAULT}> <Text color={COLORS.ERROR_DEFAULT}>
error-default error-default
</Text> </Text>
<Text color={COLORS.ERROR_INVERSE} backgroundColor:{COLORS.ERROR_DEFAULT}> <Text color={COLORS.ERROR_INVERSE} backgroundColor={COLORS.ERROR_DEFAULT}>
error-inverse error-inverse
</Text> </Text>
<Text color={COLORS.SUCCESS_DEFAULT}> <Text color={COLORS.SUCCESS_DEFAULT}>
success-default success-default
</Text> </Text>
<Text color={COLORS.SUCCESS_INVERSE} backgroundColor:{COLORS.SUCCESS_DEFAULT}> <Text color={COLORS.SUCCESS_INVERSE} backgroundColor={COLORS.SUCCESS_DEFAULT}>
success-inverse success-inverse
</Text> </Text>
<Text color={COLORS.WARNING_INVERSE} backgroundColor:{COLORS.WARNING_DEFAULT}> <Text color={COLORS.WARNING_INVERSE} backgroundColor={COLORS.WARNING_DEFAULT}>
warning-inverse warning-inverse
</Text> </Text>
<Text color={COLORS.INFO_DEFAULT}> <Text color={COLORS.INFO_DEFAULT}>
info-default info-default
</Text> </Text>
<Text color={COLORS.INFO_INVERSE} backgroundColor:{COLORS.INFO_DEFAULT}> <Text color={COLORS.INFO_INVERSE} backgroundColor={COLORS.INFO_DEFAULT}>
info-inverse info-inverse
</Text> </Text>
``` ```
@ -299,6 +299,28 @@ Renders the html:
<input placeholder="input" /> <input placeholder="input" />
``` ```
### Text Direction
Use the `textDirection` prop and the `TEXT_DIRECTIONS` object from `./text.constants.js` to change the text direction of `Text`
<Canvas>
<Story id="ui-components-component-library-text-text-stories-js--text-direction" />
</Canvas>
```jsx
import { Text, TEXT_DIRECTIONS } from '../../ui/components/component-library';
<Text textDirection={TEXT_DIRECTIONS.LEFT_TO_RIGHT}>
This is left to right (ltr) for English and most languages
</Text>
<Text textDirection={TEXT_DIRECTIONS.RIGHT_TO_LEFT}>
This is right to left (rtl) for use with other laguanges such as Arabic. This Enlgish example is incorrect usage.
</Text>
<Text textDirection={TEXT_DIRECTIONS.AUTO}>
Let the user agent decide with the auto option
</Text>
```
### Box Props ### Box Props
Use any valid box props [Box](/?path=/story/ui-components-ui-box-box-stories-js--default-story) component props to the Text component. Use any valid box props [Box](/?path=/story/ui-components-ui-box-box-stories-js--default-story) component props to the Text component.

View File

@ -1,2 +1,2 @@
export { Text } from './text'; export { Text } from './text';
export { TEXT_VARIANTS } from './text.constants'; export { TEXT_VARIANTS, TEXT_DIRECTIONS } from './text.constants';

View File

@ -13,3 +13,9 @@ export const TEXT_VARIANTS = {
BODY_XS: TEXT.BODY_XS, BODY_XS: TEXT.BODY_XS,
INHERIT: TEXT.INHERIT, INHERIT: TEXT.INHERIT,
}; };
export const TEXT_DIRECTIONS = {
LEFT_TO_RIGHT: 'ltr',
RIGHT_TO_LEFT: 'rtl',
AUTO: 'auto',
};

View File

@ -11,7 +11,7 @@ import {
OVERFLOW_WRAP, OVERFLOW_WRAP,
TEXT_COLORS, TEXT_COLORS,
} from '../../../helpers/constants/design-system'; } from '../../../helpers/constants/design-system';
import { TEXT_VARIANTS } from './text.constants'; import { TEXT_VARIANTS, TEXT_DIRECTIONS } from './text.constants';
export const ValidTags = [ export const ValidTags = [
'dd', 'dd',
@ -42,6 +42,7 @@ export const Text = React.forwardRef(
fontStyle, fontStyle,
textTransform, textTransform,
textAlign, textAlign,
textDirection,
overflowWrap, overflowWrap,
ellipsis, ellipsis,
as, as,
@ -89,6 +90,7 @@ export const Text = React.forwardRef(
ref={ref} ref={ref}
className={classnames(computedClassName)} className={classnames(computedClassName)}
as={Tag} as={Tag}
dir={textDirection}
{...props} {...props}
> >
{children} {children}
@ -139,6 +141,11 @@ Text.propTypes = {
* ./ui/helpers/constants/design-system.js * ./ui/helpers/constants/design-system.js
*/ */
textAlign: PropTypes.oneOf(Object.values(TEXT_ALIGN)), textAlign: PropTypes.oneOf(Object.values(TEXT_ALIGN)),
/**
* Change the dir (direction) global attribute of text to support the direction a language is written
* Possible values: `LEFT_TO_RIGHT` (default), `RIGHT_TO_LEFT`, `AUTO` (user agent decides)
*/
textDirection: PropTypes.oneOf(Object.values(TEXT_DIRECTIONS)),
/** /**
* The overflow-wrap of the Text component. Should use the OVERFLOW_WRAP object from * The overflow-wrap of the Text component. Should use the OVERFLOW_WRAP object from
* ./ui/helpers/constants/design-system.js * ./ui/helpers/constants/design-system.js

View File

@ -12,10 +12,12 @@ import {
OVERFLOW_WRAP, OVERFLOW_WRAP,
TEXT_TRANSFORM, TEXT_TRANSFORM,
FRACTIONS, FRACTIONS,
FLEX_DIRECTION,
} from '../../../helpers/constants/design-system'; } from '../../../helpers/constants/design-system';
import Box from '../../ui/box'; import Box from '../../ui/box';
import { ValidTags, Text } from './text'; import { ValidTags, Text } from './text';
import { TEXT_DIRECTIONS } from './text.constants';
import README from './README.mdx'; import README from './README.mdx';
@ -66,6 +68,10 @@ export default {
control: { type: 'select' }, control: { type: 'select' },
options: ValidTags, options: ValidTags,
}, },
textDirection: {
control: { type: 'select' },
options: Object.values(TEXT_DIRECTIONS),
},
className: { className: {
control: { type: 'text' }, control: { type: 'text' },
}, },
@ -273,3 +279,23 @@ export const As = (args) => (
})} })}
</> </>
); );
export const TextDirection = (args) => (
<Box
style={{ maxWidth: 300 }}
display={DISPLAY.FLEX}
flexDirection={FLEX_DIRECTION.COLUMN}
gap={4}
>
<Text {...args} textDirection={TEXT_DIRECTIONS.LEFT_TO_RIGHT}>
This is left to right (ltr) for English and most languages
</Text>
<Text {...args} textDirection={TEXT_DIRECTIONS.RIGHT_TO_LEFT}>
This is right to left (rtl) for use with other laguanges such as Arabic.
This Enlgish example is incorrect usage.
</Text>
<Text {...args} textDirection={TEXT_DIRECTIONS.AUTO}>
Let the user agent decide with the auto option
</Text>
</Box>
);

View File

@ -9,7 +9,7 @@ import {
TEXT_ALIGN, TEXT_ALIGN,
TEXT_TRANSFORM, TEXT_TRANSFORM,
} from '../../../helpers/constants/design-system'; } from '../../../helpers/constants/design-system';
import { Text } from '.'; import { Text, TEXT_DIRECTIONS } from '.';
describe('Text', () => { describe('Text', () => {
it('should render the Text without crashing', () => { it('should render the Text without crashing', () => {
@ -238,4 +238,17 @@ describe('Text', () => {
render(<Text ref={mockRef} />); render(<Text ref={mockRef} />);
expect(mockRef).toHaveBeenCalledTimes(1); expect(mockRef).toHaveBeenCalledTimes(1);
}); });
it('should render the Text with proper direction', () => {
const { getByText } = render(
<>
<Text textDirection={TEXT_DIRECTIONS.AUTO}>auto</Text>
<Text textDirection={TEXT_DIRECTIONS.LEFT_TO_RIGHT}>ltr</Text>
<Text textDirection={TEXT_DIRECTIONS.RIGHT_TO_LEFT}>rtl</Text>
</>,
);
expect(getByText('auto')).toHaveAttribute('dir', 'auto');
expect(getByText('ltr')).toHaveAttribute('dir', 'ltr');
expect(getByText('rtl')).toHaveAttribute('dir', 'rtl');
});
}); });