Create a reusable Label component (#9833)
As seen with @Bonapara, I'm creating a Label component and use it in the workflows.
This commit is contained in:
committed by
GitHub
parent
55be726105
commit
84c299f8d4
@ -8,7 +8,7 @@ import styled from '@emotion/styled';
|
|||||||
import { Handle, Position } from '@xyflow/react';
|
import { Handle, Position } from '@xyflow/react';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { capitalize } from 'twenty-shared';
|
import { capitalize } from 'twenty-shared';
|
||||||
import { isDefined, OverflowingTextWithTooltip } from 'twenty-ui';
|
import { isDefined, Label, OverflowingTextWithTooltip } from 'twenty-ui';
|
||||||
|
|
||||||
type Variant = 'placeholder';
|
type Variant = 'placeholder';
|
||||||
|
|
||||||
@ -19,15 +19,11 @@ const StyledStepNodeContainer = styled.div`
|
|||||||
padding-block: ${({ theme }) => theme.spacing(3)};
|
padding-block: ${({ theme }) => theme.spacing(3)};
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const StyledStepNodeType = styled.div`
|
const StyledStepNodeType = styled(Label)`
|
||||||
background-color: ${({ theme }) => theme.background.tertiary};
|
background-color: ${({ theme }) => theme.background.tertiary};
|
||||||
border-radius: ${({ theme }) => theme.border.radius.sm}
|
border-radius: ${({ theme }) => theme.border.radius.sm}
|
||||||
${({ theme }) => theme.border.radius.sm} 0 0;
|
${({ theme }) => theme.border.radius.sm} 0 0;
|
||||||
|
|
||||||
color: ${({ theme }) => theme.font.color.light};
|
|
||||||
font-size: 9px;
|
|
||||||
font-weight: ${({ theme }) => theme.font.weight.semiBold};
|
|
||||||
|
|
||||||
margin-left: ${({ theme }) => theme.spacing(2)};
|
margin-left: ${({ theme }) => theme.spacing(2)};
|
||||||
padding: ${({ theme }) => theme.spacing(1)} ${({ theme }) => theme.spacing(2)};
|
padding: ${({ theme }) => theme.spacing(1)} ${({ theme }) => theme.spacing(2)};
|
||||||
align-self: flex-start;
|
align-self: flex-start;
|
||||||
@ -119,7 +115,9 @@ export const WorkflowDiagramBaseStepNode = ({
|
|||||||
<StyledTargetHandle type="target" position={Position.Top} />
|
<StyledTargetHandle type="target" position={Position.Top} />
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
<StyledStepNodeType>{capitalize(nodeType)}</StyledStepNodeType>
|
<StyledStepNodeType variant="small">
|
||||||
|
{capitalize(nodeType)}
|
||||||
|
</StyledStepNodeType>
|
||||||
|
|
||||||
<StyledStepNodeInnerContainer variant={variant}>
|
<StyledStepNodeInnerContainer variant={variant}>
|
||||||
<StyledStepNodeLabel variant={variant}>
|
<StyledStepNodeLabel variant={variant}>
|
||||||
|
|||||||
@ -57,4 +57,5 @@ export * from './tooltip/OverflowingTextWithTooltip';
|
|||||||
export * from './typography/components/H1Title';
|
export * from './typography/components/H1Title';
|
||||||
export * from './typography/components/H2Title';
|
export * from './typography/components/H2Title';
|
||||||
export * from './typography/components/H3Title';
|
export * from './typography/components/H3Title';
|
||||||
|
export * from './typography/components/Label';
|
||||||
export * from './typography/components/StyledText';
|
export * from './typography/components/StyledText';
|
||||||
|
|||||||
@ -0,0 +1,18 @@
|
|||||||
|
import styled from '@emotion/styled';
|
||||||
|
|
||||||
|
export type LabelVariant = 'default' | 'small';
|
||||||
|
|
||||||
|
const StyledLabel = styled.div<{ variant?: LabelVariant }>`
|
||||||
|
color: ${({ theme }) => theme.font.color.light};
|
||||||
|
font-size: ${({ variant = 'default' }) => {
|
||||||
|
switch (variant) {
|
||||||
|
case 'default':
|
||||||
|
return '11px';
|
||||||
|
case 'small':
|
||||||
|
return '9px';
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
font-weight: ${({ theme }) => theme.font.weight.semiBold};
|
||||||
|
`;
|
||||||
|
|
||||||
|
export { StyledLabel as Label };
|
||||||
@ -0,0 +1,42 @@
|
|||||||
|
import { Meta, StoryObj } from '@storybook/react';
|
||||||
|
|
||||||
|
import { CatalogDecorator } from '@ui/testing/decorators/CatalogDecorator';
|
||||||
|
import { ComponentDecorator } from '@ui/testing/decorators/ComponentDecorator';
|
||||||
|
import { CatalogStory } from '@ui/testing/types/CatalogStory';
|
||||||
|
|
||||||
|
import { Label, LabelVariant } from '../Label';
|
||||||
|
|
||||||
|
const meta: Meta<typeof Label> = {
|
||||||
|
title: 'UI/Display/Typography/Label',
|
||||||
|
component: Label,
|
||||||
|
decorators: [ComponentDecorator],
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
|
||||||
|
type Story = StoryObj<typeof Label>;
|
||||||
|
|
||||||
|
export const Default: Story = {
|
||||||
|
decorators: [ComponentDecorator],
|
||||||
|
args: {
|
||||||
|
children: 'Label',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Catalog: CatalogStory<Story, typeof Label> = {
|
||||||
|
decorators: [CatalogDecorator],
|
||||||
|
args: {
|
||||||
|
children: 'Label',
|
||||||
|
},
|
||||||
|
parameters: {
|
||||||
|
catalog: {
|
||||||
|
dimensions: [
|
||||||
|
{
|
||||||
|
name: 'Variant',
|
||||||
|
values: ['default', 'small'] satisfies LabelVariant[],
|
||||||
|
props: (variant: LabelVariant) => ({ variant }),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user