Skip to content

Commit 6e39761

Browse files
committed
add variant and size for component
1 parent b8144d9 commit 6e39761

File tree

4 files changed

+113
-5
lines changed

4 files changed

+113
-5
lines changed

src/components/ui/Callout/Callout.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@ export type CalloutProps = {
99
children?: React.ReactNode;
1010
className?: string ;
1111
color?: string;
12+
variant?: string;
13+
size?: string;
1214
customRootClass?: string;
1315
props?: object[]
1416
}
1517

1618
const COMPONENT_NAME = 'Callout';
17-
const Callout = ({ children, className = '', color, customRootClass, ...props }: CalloutProps) => {
18-
return (<CalloutRoot customRootClass={customRootClass} className={clsx(className)} color={color ?? undefined} {...props}>
19+
const Callout = ({ children, className = '', color, variant='', size='', customRootClass, ...props }: CalloutProps) => {
20+
return (
21+
<CalloutRoot customRootClass={customRootClass} className={clsx(className)} color={color ?? undefined} variant={variant} size={size} {...props}>
1922
{children}
2023
</CalloutRoot>);
2124
};

src/components/ui/Callout/fragments/CalloutRoot.tsx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,29 @@ type CalloutRootProps = {
77
children?: React.ReactNode;
88
className?: string | '' ;
99
color?: string;
10+
variant?: string;
11+
size?: string;
1012
customRootClass?: string;
1113
props?: Record<any, any>[]
1214
}
1315

14-
const CalloutRoot = ({ children, className, color, customRootClass, ...props }: CalloutRootProps) => {
16+
const CalloutRoot = ({ children, className, color, variant='', size='', customRootClass, ...props }: CalloutRootProps) => {
1517
const rootClass = customClassSwitcher(customRootClass, COMPONENT_NAME);
16-
return <div className={clsx(rootClass, className)} data-accent-color={color ?? undefined} {...props}>
18+
const data_attributes: Record<string, string> = {};
19+
20+
if (variant) {
21+
data_attributes['data-callout-variant'] = variant;
22+
}
23+
24+
if (size) {
25+
data_attributes['data-callout-size'] = size;
26+
}
27+
28+
if (color) {
29+
data_attributes['data-accent-color'] = color;
30+
}
31+
32+
return <div className={clsx(rootClass, className)} data-accent-color={color ?? undefined} {...data_attributes} {...props}>
1733
{children}
1834
</div>;
1935
};

src/components/ui/Callout/stories/Callout.stories.tsx

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import React from 'react';
66
const InfoIcon = () => {
77
return (<svg width="18" height="18" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.49991 0.876892C3.84222 0.876892 0.877075 3.84204 0.877075 7.49972C0.877075 11.1574 3.84222 14.1226 7.49991 14.1226C11.1576 14.1226 14.1227 11.1574 14.1227 7.49972C14.1227 3.84204 11.1576 0.876892 7.49991 0.876892ZM1.82707 7.49972C1.82707 4.36671 4.36689 1.82689 7.49991 1.82689C10.6329 1.82689 13.1727 4.36671 13.1727 7.49972C13.1727 10.6327 10.6329 13.1726 7.49991 13.1726C4.36689 13.1726 1.82707 10.6327 1.82707 7.49972ZM8.24992 4.49999C8.24992 4.9142 7.91413 5.24999 7.49992 5.24999C7.08571 5.24999 6.74992 4.9142 6.74992 4.49999C6.74992 4.08577 7.08571 3.74999 7.49992 3.74999C7.91413 3.74999 8.24992 4.08577 8.24992 4.49999ZM6.00003 5.99999H6.50003H7.50003C7.77618 5.99999 8.00003 6.22384 8.00003 6.49999V9.99999H8.50003H9.00003V11H8.50003H7.50003H6.50003H6.00003V9.99999H6.50003H7.00003V6.99999H6.50003H6.00003V5.99999Z" fill="currentColor" fillRule="evenodd" clipRule="evenodd"></path></svg>);
88
};
9+
const Variants = ['soft', 'outline'];
10+
const Sizes = ['small', 'medium', 'large', 'x-large'];
911

1012
// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
1113
export default {
@@ -53,3 +55,43 @@ const RedTextTemplate = (args: any) => {
5355
</SandboxEditor>;
5456
};
5557
export const RedText = RedTextTemplate.bind();
58+
59+
export const Size = () => {
60+
return <SandboxEditor>
61+
<div className='mt-4 mb-2'>
62+
<p className='text-gray-950'>Callout Size</p>
63+
</div>
64+
<div>
65+
66+
{Variants.map((variant, index) => (
67+
<div key={index} className='mb-10'>
68+
<span key={index} className="inline-flex items-start space-x-2">
69+
{Sizes.map((size, index) => {
70+
return <Callout key={index} size={size} variant={variant} >
71+
<InfoIcon/> <span>This is a Callout</span>
72+
</Callout>;
73+
})}
74+
</span>
75+
</div>
76+
))}
77+
78+
</div>
79+
</SandboxEditor>;
80+
};
81+
82+
export const Variant = () => {
83+
return <SandboxEditor>
84+
<div className='mt-4 mb-2'>
85+
<p className='text-gray-950'>Callout Variant</p>
86+
</div>
87+
<div className='flex space-x-2'>
88+
89+
{Variants.map((variant, index) => {
90+
return <Callout key={index} variant={variant} >
91+
<InfoIcon/> <span>This is a Callout</span>
92+
</Callout>;
93+
})}
94+
95+
</div>
96+
</SandboxEditor>;
97+
};

styles/themes/components/callout.scss

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,51 @@
88
font-weight: 300;
99
font-size: 14px;
1010
gap:8px;
11-
}
11+
12+
&[data-callout-variant="outline"]{
13+
background-color: transparent;
14+
color: var(--rad-ui-color-accent-900);
15+
border: 1px solid var(--rad-ui-color-accent-900);
16+
17+
18+
}
19+
20+
&[data-callout-variant="soft"]{
21+
border-top: 1px solid var(--rad-ui-color-accent-600);
22+
border-left: 1px solid var(--rad-ui-color-accent-600);
23+
border-right: 1px solid var(--rad-ui-color-accent-600);
24+
border-bottom: 1px solid var(--rad-ui-color-accent-600);
25+
color: var(--rad-ui-color-accent-950);
26+
background-color: var(--rad-ui-color-accent-400);
27+
28+
29+
}
30+
31+
32+
/** Callout Sizes */
33+
&[data-callout-size="small"]{
34+
font-size: small;
35+
padding: 4px 8px;
36+
height: 24px;
37+
}
38+
39+
&[data-callout-size="medium"]{
40+
font-size: medium;
41+
padding: 4px 12px;
42+
height: 32px;
43+
}
44+
45+
&[data-callout-size="large"]{
46+
font-size: large;
47+
padding: 4px 16px;
48+
height: 40px;
49+
}
50+
51+
&[data-callout-size="x-large"]{
52+
font-size: x-large;
53+
padding: 4px 24px;
54+
height: 48px;
55+
}
56+
}
57+
58+

0 commit comments

Comments
 (0)