import React from 'react'; import { COLORS, DISPLAY, BACKGROUND_COLORS, BORDER_COLORS, FONT_WEIGHT, FONT_STYLE, TEXT_COLORS, TEXT_ALIGN, TEXT, OVERFLOW_WRAP, TEXT_TRANSFORM, FRACTIONS, } from '../../../helpers/constants/design-system'; import Box from '../../ui/box'; import { ValidTags, Text } from './text'; import README from './README.mdx'; const sizeKnobOptions = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; const marginSizeKnobOptions = [...sizeKnobOptions, 'auto']; export default { title: 'Components/ComponentLibrary/Text', id: __filename, parameters: { docs: { page: README, }, }, argTypes: { variant: { control: { type: 'select' }, options: Object.values(TEXT), }, color: { control: { type: 'select' }, options: Object.values(TEXT_COLORS), }, fontWeight: { control: { type: 'select' }, options: Object.values(FONT_WEIGHT), }, fontStyle: { control: { type: 'select' }, options: Object.values(FONT_STYLE), }, textTransform: { control: { type: 'select' }, options: Object.values(TEXT_TRANSFORM), }, align: { control: { type: 'select' }, options: Object.values(TEXT_ALIGN), }, overflowWrap: { control: { type: 'select' }, options: Object.values(OVERFLOW_WRAP), }, ellipsis: { control: { type: 'boolean' }, }, as: { control: { type: 'select' }, options: ValidTags, }, className: { control: { type: 'text' }, }, children: { control: { type: 'text' }, }, display: { options: Object.values(DISPLAY), control: 'select', table: { category: 'box props' }, }, backgroundColor: { options: Object.values(BACKGROUND_COLORS), control: 'select', table: { category: 'box props' }, }, borderColor: { options: Object.values(BORDER_COLORS), control: 'select', table: { category: 'box props' }, }, padding: { options: sizeKnobOptions, control: 'select', table: { category: 'box props' }, }, margin: { options: marginSizeKnobOptions, control: 'select', table: { category: 'box props' }, }, marginTop: { options: marginSizeKnobOptions, control: 'select', table: { category: 'box props' }, }, marginRight: { options: marginSizeKnobOptions, control: 'select', table: { category: 'box props' }, }, marginBottom: { options: marginSizeKnobOptions, control: 'select', table: { category: 'box props' }, }, marginLeft: { options: marginSizeKnobOptions, control: 'select', table: { category: 'box props' }, }, }, }; function renderBackgroundColor(color) { let bgColor; switch (color) { case COLORS.OVERLAY_INVERSE: bgColor = COLORS.OVERLAY_DEFAULT; break; case COLORS.PRIMARY_INVERSE: bgColor = COLORS.PRIMARY_DEFAULT; break; case COLORS.ERROR_INVERSE: bgColor = COLORS.ERROR_DEFAULT; break; case COLORS.WARNING_INVERSE: bgColor = COLORS.WARNING_DEFAULT; break; case COLORS.SUCCESS_INVERSE: bgColor = COLORS.SUCCESS_DEFAULT; break; case COLORS.INFO_INVERSE: bgColor = COLORS.INFO_DEFAULT; break; default: bgColor = null; break; } return bgColor; } export const DefaultStory = (args) => {args.children}; DefaultStory.storyName = 'Default'; DefaultStory.args = { children: 'The quick orange fox jumped over the lazy dog.', }; export const Variant = (args) => ( <> {Object.values(TEXT).map((variant) => ( {args.children || variant} ))} ); export const Color = (args) => { // Index of last valid color in TEXT_COLORS array return ( <> {Object.values(TEXT_COLORS).map((color) => { return ( {color} ); })} ); }; export const FontWeight = (args) => ( <> {Object.values(FONT_WEIGHT).map((weight) => ( {weight} ))} ); export const FontStyle = (args) => ( <> {Object.values(FONT_STYLE).map((style) => ( {style} ))} ); export const TextTransform = (args) => ( <> {Object.values(TEXT_TRANSFORM).map((transform) => ( {transform} ))} ); export const TextAlign = (args) => ( <> {Object.values(TEXT_ALIGN).map((align) => ( {align} ))} ); export const OverflowWrap = (args) => ( {OVERFLOW_WRAP.NORMAL}: 0x39013f961c378f02c2b82a6e1d31e9812786fd9d {OVERFLOW_WRAP.BREAK_WORD}: 0x39013f961c378f02c2b82a6e1d31e9812786fd9d ); export const Ellipsis = (args) => ( Ellipsis: 0x39013f961c378f02c2b82a6e1d31e9812786fd9d No Ellipsis: 0x39013f961c378f02c2b82a6e1d31e9812786fd9d ); export const As = (args) => ( <> {ValidTags.map((tag) => { if (tag === 'input') { return ; } return (
{tag}
); })} );