Skip to content

Commit bd9037c

Browse files
authored
feat(rounded): accept arbitrary values (#22721)
resolves #14368
1 parent 13c9af0 commit bd9037c

33 files changed

Lines changed: 162 additions & 42 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"props": {
3-
"rounded": "Designates the **border-radius** applied to the component. This can be **0**, **xs**, **sm**, true, **lg**, **xl**, **pill**, **circle**, and **shaped**. Find more information on available border radius classes on the [Border Radius page](/styles/border-radius).",
3+
"rounded": "Designates the **border-radius** applied to the component. You can use the predefined sizes **0**, **xs**, **sm**, **md**, **lg**, **xl**, **pill**, **circle**, and **shaped**, pass `true` for the component default. Since v4.1 you can also provide any valid CSS value (e.g. `8px`, `50%`, `1em`) or number (converted to `px`). Find more information on available border radius classes on the [Border Radius page](/styles/border-radius).",
44
"tile": "Removes any applied **border-radius** from the component."
55
}
66
}

packages/docs/src/pages/en/styles/border-radius.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
---
2+
emphasized: true
23
meta:
34
title: Border radius
45
description: Use border utilities to quickly style the border-radius of any element.
@@ -149,6 +150,18 @@ Setting the **rounded** property applies a component specific border-radius clas
149150

150151
<ExamplesExample file="border-radius/misc-components" />
151152

153+
## Arbitrary border radius
154+
155+
<DocIntroduced version="4.1.0" />
156+
157+
In addition to the named sizes, the **rounded** prop accepts any valid CSS value or a plain number (converted to `px`):
158+
159+
```html
160+
<v-sheet rounded="8" /> <!-- border-radius: 8px -->
161+
<v-sheet rounded="1.5rem" /> <!-- border-radius: 1.5rem -->
162+
<v-sheet rounded="50%" /> <!-- border-radius: 50% -->
163+
```
164+
152165
## SASS variables
153166

154167
You can also use the following SASS variables to customize the border radius:

packages/vuetify/src/components/VAlert/VAlert.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ export const VAlert = genericComponent<VAlertSlots>()({
125125
const { elevationClasses } = useElevation(props)
126126
const { locationStyles } = useLocation(props)
127127
const { positionClasses } = usePosition(props)
128-
const { roundedClasses } = useRounded(props)
128+
const { roundedClasses, roundedStyles } = useRounded(props)
129129
const { textColorClasses, textColorStyles } = useTextColor(() => props.borderColor)
130130
const { t } = useLocale()
131131

@@ -175,6 +175,7 @@ export const VAlert = genericComponent<VAlertSlots>()({
175175
colorStyles.value,
176176
dimensionStyles.value,
177177
locationStyles.value,
178+
roundedStyles.value,
178179
props.style,
179180
]}
180181
role="alert"

packages/vuetify/src/components/VAvatar/VAvatar.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export const VAvatar = genericComponent<VAvatarSlots>()({
6161
const { borderClasses } = useBorder(props)
6262
const { colorClasses, colorStyles, variantClasses } = useVariant(props)
6363
const { densityClasses } = useDensity(props)
64-
const { roundedClasses } = useRounded(props)
64+
const { roundedClasses, roundedStyles } = useRounded(props)
6565
const { sizeClasses, sizeStyles } = useSize(props)
6666

6767
const badgeDotSize = computed(() => {
@@ -112,6 +112,7 @@ export const VAvatar = genericComponent<VAvatarSlots>()({
112112
style={[
113113
colorStyles.value,
114114
sizeStyles.value,
115+
roundedStyles.value,
115116
props.style,
116117
]}
117118
>

packages/vuetify/src/components/VBadge/VBadge.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export const VBadge = genericComponent<VBadgeSlots>()({
6464

6565
setup (props, ctx) {
6666
const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)
67-
const { roundedClasses } = useRounded(props)
67+
const { roundedClasses, roundedStyles } = useRounded(props)
6868
const { t } = useLocale()
6969
const { textColorClasses, textColorStyles } = useTextColor(() => props.textColor)
7070
const { themeClasses } = useTheme()
@@ -134,6 +134,7 @@ export const VBadge = genericComponent<VBadgeSlots>()({
134134
width: convertToUnit(props.dotSize),
135135
height: convertToUnit(props.dotSize),
136136
} : {},
137+
roundedStyles.value,
137138
]}
138139
aria-atomic="true"
139140
aria-label={ t(props.label, value) }

packages/vuetify/src/components/VBanner/VBanner.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export const VBanner = genericComponent<VBannerSlots>()({
7474
const { elevationClasses } = useElevation(props)
7575
const { locationStyles } = useLocation(props)
7676
const { positionClasses } = usePosition(props)
77-
const { roundedClasses } = useRounded(props)
77+
const { roundedClasses, roundedStyles } = useRounded(props)
7878

7979
const { themeClasses } = provideTheme(props)
8080

@@ -111,6 +111,7 @@ export const VBanner = genericComponent<VBannerSlots>()({
111111
backgroundColorStyles.value,
112112
dimensionStyles.value,
113113
locationStyles.value,
114+
roundedStyles.value,
114115
props.style,
115116
]}
116117
role="banner"

packages/vuetify/src/components/VBottomNavigation/VBottomNavigation.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export const VBottomNavigation = genericComponent<new <T>(
7777
const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)
7878
const { densityClasses } = useDensity(props)
7979
const { elevationClasses } = useElevation(props)
80-
const { roundedClasses } = useRounded(props)
80+
const { roundedClasses, roundedStyles } = useRounded(props)
8181
const { ssrBootStyles } = useSsrBoot()
8282
const height = computed(() => (
8383
Number(props.height) -
@@ -132,6 +132,7 @@ export const VBottomNavigation = genericComponent<new <T>(
132132
height: convertToUnit(height.value),
133133
},
134134
ssrBootStyles.value,
135+
roundedStyles.value,
135136
props.style,
136137
]}
137138
>

packages/vuetify/src/components/VBreadcrumbs/VBreadcrumbs.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export const VBreadcrumbs = genericComponent<new <T extends BreadcrumbItem>(
7373
setup (props, { slots }) {
7474
const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)
7575
const { densityClasses } = useDensity(props)
76-
const { roundedClasses } = useRounded(props)
76+
const { roundedClasses, roundedStyles } = useRounded(props)
7777

7878
provideDefaults({
7979
VBreadcrumbsDivider: {
@@ -105,6 +105,7 @@ export const VBreadcrumbs = genericComponent<new <T extends BreadcrumbItem>(
105105
]}
106106
style={[
107107
backgroundColorStyles.value,
108+
roundedStyles.value,
108109
props.style,
109110
]}
110111
>

packages/vuetify/src/components/VBtn/VBtn.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export const VBtn = genericComponent<VBtnSlots>()({
111111
const { loaderClasses } = useLoader(props)
112112
const { locationStyles } = useLocation(props)
113113
const { positionClasses } = usePosition(props)
114-
const { roundedClasses } = useRounded(props)
114+
const { roundedClasses, roundedStyles } = useRounded(props)
115115
const { sizeClasses, sizeStyles } = useSize(props)
116116
const group = useGroupItem(props, props.symbol, false)
117117
const link = useLink(props, attrs)
@@ -223,6 +223,7 @@ export const VBtn = genericComponent<VBtnSlots>()({
223223
dimensionStyles.value,
224224
locationStyles.value,
225225
sizeStyles.value,
226+
roundedStyles.value,
226227
props.style,
227228
]}
228229
aria-busy={ props.loading ? true : undefined }

packages/vuetify/src/components/VBtnGroup/VBtnGroup.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export const VBtnGroup = genericComponent()({
4747
const { densityClasses } = useDensity(props)
4848
const { borderClasses } = useBorder(props)
4949
const { elevationClasses } = useElevation(props)
50-
const { roundedClasses } = useRounded(props)
50+
const { roundedClasses, roundedStyles } = useRounded(props)
5151

5252
provideDefaults({
5353
VBtn: {
@@ -76,7 +76,7 @@ export const VBtnGroup = genericComponent()({
7676
roundedClasses.value,
7777
props.class,
7878
]}
79-
style={ props.style }
79+
style={[roundedStyles.value, props.style]}
8080
v-slots={ slots }
8181
/>
8282
)

0 commit comments

Comments
 (0)