Skip to content

Commit d48d210

Browse files
committed
fix(Badge): without wrapper
1 parent b201787 commit d48d210

File tree

2 files changed

+66
-94
lines changed

2 files changed

+66
-94
lines changed

packages/css/badge.css

+39-54
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,39 @@
22
--dsc-badge-background: var(--ds-color-accent-base-default);
33
--dsc-badge-color: var(--ds-color-accent-contrast-default);
44
--dsc-badge-padding: 0 calc(var(--ds-spacing-1) + calc(var(--ds-spacing-1) / 2));
5-
--dsc-badge-height: calc(var(--ds-sizing-3) + calc(var(--ds-spacing-1) / 2));
6-
--dsc-badge-width: calc(var(--ds-sizing-3) + calc(var(--ds-spacing-1) / 2));
5+
--dsc-badge-size: calc(var(--ds-sizing-3) + calc(var(--ds-spacing-1) / 2));
76

8-
background-color: var(--dsc-badge-background);
9-
color: var(--dsc-badge-color);
10-
border-radius: var(--ds-border-radius-full);
11-
display: grid;
12-
place-items: center;
13-
padding: var(--dsc-badge-padding);
14-
height: var(--dsc-badge-height);
15-
width: var(--dsc-badge-width);
7+
display: inline-flex;
8+
position: relative;
169

17-
&.ds-badge--count {
18-
--dsc-badge-height: var(--ds-sizing-6);
19-
--dsc-badge-width: auto;
20-
--dsc-badge-padding: 0 calc(var(--ds-spacing-1) + calc(var(--ds-spacing-1) / 2));
10+
&::before {
11+
content: attr(data-count);
12+
background: var(--dsc-badge-background);
13+
border-radius: var(--ds-border-radius-full);
14+
box-sizing: border-box;
15+
color: var(--dsc-badge-color);
16+
display: grid;
17+
min-height: var(--dsc-badge-size);
18+
min-width: var(--dsc-badge-size);
19+
padding: var(--dsc-badge-padding);
20+
place-items: center;
2121
}
2222

2323
&[data-size='sm'] {
24-
--dsc-badge-height: var(--ds-sizing-3);
25-
--dsc-badge-width: var(--ds-sizing-3);
24+
--dsc-badge-size: var(--ds-sizing-3);
25+
--dsc-badge-padding: 0 var(--ds-spacing-1);
2626

27-
&.ds-badge--count {
28-
--dsc-badge-height: var(--ds-sizing-5);
29-
--dsc-badge-width: auto;
30-
--dsc-badge-padding: 0 var(--ds-spacing-1);
27+
&[data-count] {
28+
--dsc-badge-size: var(--ds-sizing-5);
3129
}
3230
}
3331

3432
&[data-size='lg'] {
35-
--dsc-badge-height: var(--ds-sizing-4);
36-
--dsc-badge-width: var(--ds-sizing-4);
33+
--dsc-badge-size: var(--ds-sizing-4);
34+
--dsc-badge-padding: 0 var(--ds-spacing-2);
3735

38-
&.ds-badge--count {
39-
--dsc-badge-height: var(--ds-sizing-7);
40-
--dsc-badge-width: auto;
41-
--dsc-badge-padding: 0 var(--ds-spacing-2);
36+
&[data-count] {
37+
--dsc-badge-size: var(--ds-sizing-7);
4238
}
4339
}
4440

@@ -68,66 +64,55 @@
6864
}
6965

7066
/* If placement is present, we are floating */
71-
&[data-placement] {
72-
transform-origin: center;
67+
&[data-placement]::before {
7368
position: absolute;
7469
}
7570

76-
&[data-placement='top-right'][data-overlap='rectangle'] {
71+
&[data-placement='top-right']::before {
7772
top: 0;
7873
right: 0;
79-
transform: translateX(50%) translateY(-50%);
74+
translate: 50% -50%;
8075
}
8176

82-
&[data-placement='top-left'][data-overlap='rectangle'] {
77+
&[data-placement='top-left']::before {
8378
top: 0;
8479
left: 0;
85-
transform: translateX(-50%) translateY(-50%);
80+
translate: -50% -50%;
8681
}
8782

88-
&[data-placement='bottom-right'][data-overlap='rectangle'] {
83+
&[data-placement='bottom-right']::before {
8984
bottom: 0;
9085
right: 0;
91-
transform: translateX(50%) translateY(50%);
86+
translate: 50% 50%;
9287
}
9388

94-
&[data-placement='bottom-left'][data-overlap='rectangle'] {
89+
&[data-placement='bottom-left']::before {
9590
bottom: 0;
9691
left: 0;
97-
transform: translateX(-50%) translateY(50%);
92+
translate: -50% 50%;
9893
}
9994

100-
&[data-placement='top-right'][data-overlap='circle'] {
95+
&[data-placement='top-right'][data-overlap='circle']::before {
10196
top: 14%;
10297
right: 14%;
103-
transform: translateX(50%) translateY(-50%);
98+
translate: 50% -50%;
10499
}
105100

106-
&[data-placement='top-left'][data-overlap='circle'] {
101+
&[data-placement='top-left'][data-overlap='circle']::before {
107102
top: 14%;
108103
left: 14%;
109-
transform: translateX(-50%) translateY(-50%);
104+
translate: -50% -50%;
110105
}
111106

112-
&[data-placement='bottom-right'][data-overlap='circle'] {
107+
&[data-placement='bottom-right'][data-overlap='circle']::before {
113108
bottom: 14%;
114109
right: 14%;
115-
transform: translateX(50%) translateY(50%);
110+
translate: 50% 50%;
116111
}
117112

118-
&[data-placement='bottom-left'][data-overlap='circle'] {
113+
&[data-placement='bottom-left'][data-overlap='circle']::before {
119114
bottom: 14%;
120115
left: 14%;
121-
transform: translateX(-50%) translateY(50%);
116+
translate: -50% 50%;
122117
}
123118
}
124-
125-
.ds-badge__wrapper {
126-
display: inline-flex;
127-
position: relative;
128-
width: fit-content;
129-
height: fit-content;
130-
flex-shrink: 0;
131-
align-items: center;
132-
justify-content: center;
133-
}

packages/react/src/components/Badge/Badge.tsx

+27-40
Original file line numberDiff line numberDiff line change
@@ -64,44 +64,31 @@ const paragraphSizeMap: {
6464
* </Badge>
6565
* ```
6666
*/
67-
export const Badge = forwardRef<HTMLSpanElement, BadgeProps>(
68-
(
69-
{
70-
color = 'accent',
71-
size = 'md',
72-
placement = 'top-right',
73-
overlap = 'rectangle',
74-
count,
75-
maxCount,
76-
children,
77-
className,
78-
...rest
79-
},
80-
ref,
81-
) => {
82-
return (
83-
<div className={cl('ds-badge__wrapper', className)}>
84-
{children}
85-
<Paragraph asChild variant='short' size={paragraphSizeMap[size]}>
86-
<span
87-
className={cl('ds-badge', count && 'ds-badge--count')}
88-
ref={ref}
89-
data-size={size}
90-
data-color={color}
91-
{...(children
92-
? {
93-
'data-placement': placement,
94-
'data-overlap': overlap,
95-
}
96-
: {})}
97-
{...rest}
98-
>
99-
{maxCount && count && count > maxCount ? `${maxCount}+` : count}
100-
</span>
101-
</Paragraph>
102-
</div>
103-
);
67+
export const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(
68+
{
69+
className,
70+
color = 'accent',
71+
count,
72+
maxCount = Infinity,
73+
overlap = 'rectangle',
74+
placement = 'top-right',
75+
size = 'md',
76+
...rest
10477
},
105-
);
106-
107-
Badge.displayName = 'Badge';
78+
ref,
79+
) {
80+
return (
81+
<Paragraph asChild variant='short' size={paragraphSizeMap[size]}>
82+
<span
83+
className={cl('ds-badge', className)}
84+
data-color={color}
85+
data-count={count && count > maxCount ? `${maxCount}+` : count}
86+
data-overlap={rest.children ? overlap : null}
87+
data-placement={rest.children ? placement : null}
88+
data-size={size}
89+
ref={ref}
90+
{...rest}
91+
/>
92+
</Paragraph>
93+
);
94+
});

0 commit comments

Comments
 (0)