Skip to content

Commit 4ae4984

Browse files
gabrieldonadelfacebook-github-bot
authored andcommitted
feat: Add logical border radius implementation (#35572)
Summary: This PR implements logical border-radius as requested on #34425. This implementation includes the addition of the following style properties - `borderEndEndRadius`, equivalent to `borderBottomEndRadius`. - `borderEndStartRadius`, equivalent to `borderBottomStartRadius`. - `borderStartEndRadius`, equivalent to `borderTopEndRadius`. - `borderStartStartRadius`, equivalent to `borderTopStartRadius`. ## Changelog [GENERAL] [ADDED] - Add logical border-radius implementation Pull Request resolved: #35572 Test Plan: 1. Open the RNTester app and navigate to the `RTLExample` page 2. Test the new style properties through the `Logical Border Radii Start/End` section https://user-images.githubusercontent.com/11707729/206623732-6d542347-93f9-40da-be97-f7dcd5f66ca9.mov Reviewed By: necolas Differential Revision: D42002043 Pulled By: NickGerleman fbshipit-source-id: a0aa9783c280398b437aeb7a00c6eb3f767657a5
1 parent 66927ec commit 4ae4984

File tree

20 files changed

+234
-32
lines changed

20 files changed

+234
-32
lines changed

Libraries/Animated/NativeAnimatedHelper.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,11 +391,15 @@ const SUPPORTED_STYLES = {
391391
borderBottomLeftRadius: true,
392392
borderBottomRightRadius: true,
393393
borderBottomStartRadius: true,
394+
borderEndEndRadius: true,
395+
borderEndStartRadius: true,
394396
borderRadius: true,
395397
borderTopEndRadius: true,
396398
borderTopLeftRadius: true,
397399
borderTopRightRadius: true,
398400
borderTopStartRadius: true,
401+
borderStartEndRadius: true,
402+
borderStartStartRadius: true,
399403
elevation: true,
400404
opacity: true,
401405
transform: true,

Libraries/Components/View/ReactNativeStyleAttributes.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,14 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {
125125
borderColor: colorAttributes,
126126
borderCurve: true,
127127
borderEndColor: colorAttributes,
128+
borderEndEndRadius: true,
129+
borderEndStartRadius: true,
128130
borderLeftColor: colorAttributes,
129131
borderRadius: true,
130132
borderRightColor: colorAttributes,
131133
borderStartColor: colorAttributes,
134+
borderStartEndRadius: true,
135+
borderStartStartRadius: true,
132136
borderStyle: true,
133137
borderTopColor: colorAttributes,
134138
borderTopEndRadius: true,

Libraries/Components/View/ViewNativeComponent.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
4545
borderTopEndRadius: true,
4646
borderBottomStartRadius: true,
4747
borderBottomEndRadius: true,
48-
48+
borderEndEndRadius: true,
49+
borderEndStartRadius: true,
50+
borderStartEndRadius: true,
51+
borderStartStartRadius: true,
4952
borderStyle: true,
5053
hitSlop: true,
5154
pointerEvents: true,

Libraries/NativeComponent/BaseViewConfig.ios.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,10 @@ const validAttributesForNonEventProps = {
221221
borderBottomRightRadius: true,
222222
borderBottomStartRadius: true,
223223
borderBottomEndRadius: true,
224+
borderEndEndRadius: true,
225+
borderEndStartRadius: true,
226+
borderStartEndRadius: true,
227+
borderStartStartRadius: true,
224228
display: true,
225229
zIndex: true,
226230

Libraries/StyleSheet/StyleSheetTypes.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,16 @@ export interface ViewStyle extends FlexStyle, ShadowStyleIOS, TransformsStyle {
240240
borderBottomWidth?: number | undefined;
241241
borderColor?: ColorValue | undefined;
242242
borderEndColor?: ColorValue | undefined;
243+
borderEndEndRadius?: number | undefined;
244+
borderEndStartRadius?: number | undefined;
243245
borderLeftColor?: ColorValue | undefined;
244246
borderLeftWidth?: number | undefined;
245247
borderRadius?: number | undefined;
246248
borderRightColor?: ColorValue | undefined;
247249
borderRightWidth?: number | undefined;
248250
borderStartColor?: ColorValue | undefined;
251+
borderStartEndRadius?: number | undefined;
252+
borderStartStartRadius?: number | undefined;
249253
borderStyle?: 'solid' | 'dotted' | 'dashed' | undefined;
250254
borderTopColor?: ColorValue | undefined;
251255
borderTopEndRadius?: number | undefined;

Libraries/StyleSheet/StyleSheetTypes.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,10 @@ export type ____ViewStyle_InternalCore = $ReadOnly<{
703703
borderBottomLeftRadius?: number | AnimatedNode,
704704
borderBottomRightRadius?: number | AnimatedNode,
705705
borderBottomStartRadius?: number | AnimatedNode,
706+
borderEndEndRadius?: number | AnimatedNode,
707+
borderEndStartRadius?: number | AnimatedNode,
708+
borderStartEndRadius?: number | AnimatedNode,
709+
borderStartStartRadius?: number | AnimatedNode,
706710
borderTopEndRadius?: number | AnimatedNode,
707711
borderTopLeftRadius?: number | AnimatedNode,
708712
borderTopRightRadius?: number | AnimatedNode,

React/Views/RCTView.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ extern const UIAccessibilityTraits SwitchAccessibilityTrait;
7171
@property (nonatomic, assign) CGFloat borderBottomRightRadius;
7272
@property (nonatomic, assign) CGFloat borderBottomStartRadius;
7373
@property (nonatomic, assign) CGFloat borderBottomEndRadius;
74+
@property (nonatomic, assign) CGFloat borderEndEndRadius;
75+
@property (nonatomic, assign) CGFloat borderEndStartRadius;
76+
@property (nonatomic, assign) CGFloat borderStartEndRadius;
77+
@property (nonatomic, assign) CGFloat borderStartStartRadius;
7478

7579
/**
7680
* Border colors (actually retained).

React/Views/RCTView.m

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ - (instancetype)initWithFrame:(CGRect)frame
128128
_borderBottomRightRadius = -1;
129129
_borderBottomStartRadius = -1;
130130
_borderBottomEndRadius = -1;
131+
_borderEndEndRadius = -1;
132+
_borderEndStartRadius = -1;
133+
_borderStartEndRadius = -1;
134+
_borderStartStartRadius = -1;
131135
_borderCurve = RCTBorderCurveCircular;
132136
_borderStyle = RCTBorderStyleSolid;
133137
_hitTestEdgeInsets = UIEdgeInsetsZero;
@@ -667,11 +671,16 @@ - (RCTCornerRadii)cornerRadii
667671
CGFloat bottomLeftRadius;
668672
CGFloat bottomRightRadius;
669673

674+
const CGFloat logicalTopStartRadius = RCTDefaultIfNegativeTo(_borderStartStartRadius, _borderTopStartRadius);
675+
const CGFloat logicalTopEndRadius = RCTDefaultIfNegativeTo(_borderStartEndRadius, _borderTopEndRadius);
676+
const CGFloat logicalBottomStartRadius = RCTDefaultIfNegativeTo(_borderEndStartRadius, _borderBottomStartRadius);
677+
const CGFloat logicalBottomEndRadius = RCTDefaultIfNegativeTo(_borderEndEndRadius, _borderBottomEndRadius);
678+
670679
if ([[RCTI18nUtil sharedInstance] doLeftAndRightSwapInRTL]) {
671-
const CGFloat topStartRadius = RCTDefaultIfNegativeTo(_borderTopLeftRadius, _borderTopStartRadius);
672-
const CGFloat topEndRadius = RCTDefaultIfNegativeTo(_borderTopRightRadius, _borderTopEndRadius);
673-
const CGFloat bottomStartRadius = RCTDefaultIfNegativeTo(_borderBottomLeftRadius, _borderBottomStartRadius);
674-
const CGFloat bottomEndRadius = RCTDefaultIfNegativeTo(_borderBottomRightRadius, _borderBottomEndRadius);
680+
const CGFloat topStartRadius = RCTDefaultIfNegativeTo(_borderTopLeftRadius, logicalTopStartRadius);
681+
const CGFloat topEndRadius = RCTDefaultIfNegativeTo(_borderTopRightRadius, logicalTopEndRadius);
682+
const CGFloat bottomStartRadius = RCTDefaultIfNegativeTo(_borderBottomLeftRadius, logicalBottomStartRadius);
683+
const CGFloat bottomEndRadius = RCTDefaultIfNegativeTo(_borderBottomRightRadius, logicalBottomEndRadius);
675684

676685
const CGFloat directionAwareTopLeftRadius = isRTL ? topEndRadius : topStartRadius;
677686
const CGFloat directionAwareTopRightRadius = isRTL ? topStartRadius : topEndRadius;
@@ -683,10 +692,10 @@ - (RCTCornerRadii)cornerRadii
683692
bottomLeftRadius = RCTDefaultIfNegativeTo(radius, directionAwareBottomLeftRadius);
684693
bottomRightRadius = RCTDefaultIfNegativeTo(radius, directionAwareBottomRightRadius);
685694
} else {
686-
const CGFloat directionAwareTopLeftRadius = isRTL ? _borderTopEndRadius : _borderTopStartRadius;
687-
const CGFloat directionAwareTopRightRadius = isRTL ? _borderTopStartRadius : _borderTopEndRadius;
688-
const CGFloat directionAwareBottomLeftRadius = isRTL ? _borderBottomEndRadius : _borderBottomStartRadius;
689-
const CGFloat directionAwareBottomRightRadius = isRTL ? _borderBottomStartRadius : _borderBottomEndRadius;
695+
const CGFloat directionAwareTopLeftRadius = isRTL ? logicalTopEndRadius : logicalTopStartRadius;
696+
const CGFloat directionAwareTopRightRadius = isRTL ? logicalTopStartRadius : logicalTopEndRadius;
697+
const CGFloat directionAwareBottomLeftRadius = isRTL ? logicalBottomEndRadius : logicalBottomStartRadius;
698+
const CGFloat directionAwareBottomRightRadius = isRTL ? logicalBottomStartRadius : logicalBottomEndRadius;
690699

691700
topLeftRadius =
692701
RCTDefaultIfNegativeTo(radius, RCTDefaultIfNegativeTo(_borderTopLeftRadius, directionAwareTopLeftRadius));
@@ -946,7 +955,8 @@ -(void)setBorder##side##Radius : (CGFloat)radius \
946955

947956
setBorderRadius() setBorderRadius(TopLeft) setBorderRadius(TopRight) setBorderRadius(TopStart)
948957
setBorderRadius(TopEnd) setBorderRadius(BottomLeft) setBorderRadius(BottomRight)
949-
setBorderRadius(BottomStart) setBorderRadius(BottomEnd)
958+
setBorderRadius(BottomStart) setBorderRadius(BottomEnd) setBorderRadius(EndEnd)
959+
setBorderRadius(EndStart) setBorderRadius(StartEnd) setBorderRadius(StartStart)
950960

951961
#pragma mark - Border Curve
952962

@@ -960,7 +970,7 @@ -(void)setBorder##side##Curve : (RCTBorderCurve)curve \
960970
[self.layer setNeedsDisplay]; \
961971
}
962972

963-
setBorderCurve()
973+
setBorderCurve()
964974

965975
#pragma mark - Border Style
966976

@@ -974,6 +984,6 @@ -(void)setBorder##side##Style : (RCTBorderStyle)style \
974984
[self.layer setNeedsDisplay]; \
975985
}
976986

977-
setBorderStyle()
987+
setBorderStyle()
978988

979-
@end
989+
@end

React/Views/RCTViewManager.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,10 @@ - (RCTShadowView *)shadowView
376376
RCT_VIEW_BORDER_RADIUS_PROPERTY(BottomRight)
377377
RCT_VIEW_BORDER_RADIUS_PROPERTY(BottomStart)
378378
RCT_VIEW_BORDER_RADIUS_PROPERTY(BottomEnd)
379+
RCT_VIEW_BORDER_RADIUS_PROPERTY(EndEnd)
380+
RCT_VIEW_BORDER_RADIUS_PROPERTY(EndStart)
381+
RCT_VIEW_BORDER_RADIUS_PROPERTY(StartEnd)
382+
RCT_VIEW_BORDER_RADIUS_PROPERTY(StartStart)
379383

380384
RCT_REMAP_VIEW_PROPERTY(display, reactDisplay, YGDisplay)
381385
RCT_REMAP_VIEW_PROPERTY(zIndex, reactZIndex, NSInteger)

ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ public class ViewProps {
139139
public static final String BORDER_TOP_END_RADIUS = "borderTopEndRadius";
140140
public static final String BORDER_BOTTOM_START_RADIUS = "borderBottomStartRadius";
141141
public static final String BORDER_BOTTOM_END_RADIUS = "borderBottomEndRadius";
142+
public static final String BORDER_END_END_RADIUS = "borderEndEndRadius";
143+
public static final String BORDER_END_START_RADIUS = "borderEndStartRadius";
144+
public static final String BORDER_START_END_RADIUS = "borderStartEndRadius";
145+
public static final String BORDER_START_START_RADIUS = "borderStartStartRadius";
142146
public static final String BORDER_START_COLOR = "borderStartColor";
143147
public static final String BORDER_END_COLOR = "borderEndColor";
144148
public static final String ON_LAYOUT = "onLayout";

ReactAndroid/src/main/java/com/facebook/react/views/view/ReactMapBufferPropSetter.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ object ReactMapBufferPropSetter {
9797
private const val CORNER_BOTTOM_END = 6
9898
private const val CORNER_BOTTOM_START = 7
9999
private const val CORNER_ALL = 8
100+
private const val CORNER_END_END = 9
101+
private const val CORNER_END_START = 10
102+
private const val CORNER_START_END = 11
103+
private const val CORNER_START_START = 12
100104

101105
private const val NATIVE_DRAWABLE_KIND = 0
102106
private const val NATIVE_DRAWABLE_ATTRIBUTE = 1
@@ -365,6 +369,10 @@ object ReactMapBufferPropSetter {
365369
CORNER_TOP_END -> 6
366370
CORNER_BOTTOM_START -> 7
367371
CORNER_BOTTOM_END -> 8
372+
CORNER_END_END -> 9
373+
CORNER_END_START -> 10
374+
CORNER_START_END -> 11
375+
CORNER_START_START -> 12
368376
else -> throw IllegalArgumentException("Unknown key for border style: $key")
369377
}
370378
val borderRadius = entry.doubleValue

ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,11 @@ public enum BorderRadiusLocation {
128128
TOP_START,
129129
TOP_END,
130130
BOTTOM_START,
131-
BOTTOM_END
131+
BOTTOM_END,
132+
END_END,
133+
END_START,
134+
START_END,
135+
START_START
132136
}
133137

134138
public ReactViewBackgroundDrawable(Context context) {
@@ -271,7 +275,7 @@ public void setRadius(float radius) {
271275

272276
public void setRadius(float radius, int position) {
273277
if (mBorderCornerRadii == null) {
274-
mBorderCornerRadii = new float[8];
278+
mBorderCornerRadii = new float[12];
275279
Arrays.fill(mBorderCornerRadii, YogaConstants.UNDEFINED);
276280
}
277281

@@ -581,6 +585,11 @@ private void updatePath() {
581585
float bottomStartRadius = getBorderRadius(BorderRadiusLocation.BOTTOM_START);
582586
float bottomEndRadius = getBorderRadius(BorderRadiusLocation.BOTTOM_END);
583587

588+
float endEndRadius = getBorderRadius(BorderRadiusLocation.END_END);
589+
float endStartRadius = getBorderRadius(BorderRadiusLocation.END_START);
590+
float startEndRadius = getBorderRadius(BorderRadiusLocation.START_END);
591+
float startStartRadius = getBorderRadius(BorderRadiusLocation.START_START);
592+
584593
if (I18nUtil.getInstance().doLeftAndRightSwapInRTL(mContext)) {
585594
if (YogaConstants.isUndefined(topStartRadius)) {
586595
topStartRadius = topLeftRadius;
@@ -598,20 +607,44 @@ private void updatePath() {
598607
bottomEndRadius = bottomRightRadius;
599608
}
600609

601-
final float directionAwareTopLeftRadius = isRTL ? topEndRadius : topStartRadius;
602-
final float directionAwareTopRightRadius = isRTL ? topStartRadius : topEndRadius;
603-
final float directionAwareBottomLeftRadius = isRTL ? bottomEndRadius : bottomStartRadius;
604-
final float directionAwareBottomRightRadius = isRTL ? bottomStartRadius : bottomEndRadius;
610+
final float logicalTopStartRadius =
611+
YogaConstants.isUndefined(topStartRadius) ? startStartRadius : topStartRadius;
612+
final float logicalTopEndRadius =
613+
YogaConstants.isUndefined(topEndRadius) ? startEndRadius : topEndRadius;
614+
final float logicalBottomStartRadius =
615+
YogaConstants.isUndefined(bottomStartRadius) ? endStartRadius : bottomStartRadius;
616+
final float logicalBottomEndRadius =
617+
YogaConstants.isUndefined(bottomEndRadius) ? endEndRadius : bottomEndRadius;
618+
619+
final float directionAwareTopLeftRadius = isRTL ? logicalTopEndRadius : logicalTopStartRadius;
620+
final float directionAwareTopRightRadius =
621+
isRTL ? logicalTopStartRadius : logicalTopEndRadius;
622+
final float directionAwareBottomLeftRadius =
623+
isRTL ? logicalBottomEndRadius : logicalBottomStartRadius;
624+
final float directionAwareBottomRightRadius =
625+
isRTL ? logicalBottomStartRadius : logicalBottomEndRadius;
605626

606627
topLeftRadius = directionAwareTopLeftRadius;
607628
topRightRadius = directionAwareTopRightRadius;
608629
bottomLeftRadius = directionAwareBottomLeftRadius;
609630
bottomRightRadius = directionAwareBottomRightRadius;
610631
} else {
611-
final float directionAwareTopLeftRadius = isRTL ? topEndRadius : topStartRadius;
612-
final float directionAwareTopRightRadius = isRTL ? topStartRadius : topEndRadius;
613-
final float directionAwareBottomLeftRadius = isRTL ? bottomEndRadius : bottomStartRadius;
614-
final float directionAwareBottomRightRadius = isRTL ? bottomStartRadius : bottomEndRadius;
632+
final float logicalTopStartRadius =
633+
YogaConstants.isUndefined(topStartRadius) ? startStartRadius : topStartRadius;
634+
final float logicalTopEndRadius =
635+
YogaConstants.isUndefined(topEndRadius) ? startEndRadius : topEndRadius;
636+
final float logicalBottomStartRadius =
637+
YogaConstants.isUndefined(bottomStartRadius) ? endStartRadius : bottomStartRadius;
638+
final float logicalBottomEndRadius =
639+
YogaConstants.isUndefined(bottomEndRadius) ? endEndRadius : bottomEndRadius;
640+
641+
final float directionAwareTopLeftRadius = isRTL ? logicalTopEndRadius : logicalTopStartRadius;
642+
final float directionAwareTopRightRadius =
643+
isRTL ? logicalTopStartRadius : logicalTopEndRadius;
644+
final float directionAwareBottomLeftRadius =
645+
isRTL ? logicalBottomEndRadius : logicalBottomStartRadius;
646+
final float directionAwareBottomRightRadius =
647+
isRTL ? logicalBottomStartRadius : logicalBottomEndRadius;
615648

616649
if (!YogaConstants.isUndefined(directionAwareTopLeftRadius)) {
617650
topLeftRadius = directionAwareTopLeftRadius;

ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ public void nextFocusUp(ReactViewGroup view, int viewId) {
119119
ViewProps.BORDER_TOP_END_RADIUS,
120120
ViewProps.BORDER_BOTTOM_START_RADIUS,
121121
ViewProps.BORDER_BOTTOM_END_RADIUS,
122+
ViewProps.BORDER_END_END_RADIUS,
123+
ViewProps.BORDER_END_START_RADIUS,
124+
ViewProps.BORDER_START_END_RADIUS,
125+
ViewProps.BORDER_START_START_RADIUS,
122126
},
123127
defaultFloat = YogaConstants.UNDEFINED)
124128
public void setBorderRadius(ReactViewGroup view, int index, float borderRadius) {

ReactAndroid/src/main/jni/react/fabric/viewPropConversions.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ constexpr MapBuffer::Key CORNER_TOP_END = 5;
113113
constexpr MapBuffer::Key CORNER_BOTTOM_END = 6;
114114
constexpr MapBuffer::Key CORNER_BOTTOM_START = 7;
115115
constexpr MapBuffer::Key CORNER_ALL = 8;
116+
constexpr MapBuffer::Key CORNER_END_END = 9;
117+
constexpr MapBuffer::Key CORNER_END_START = 10;
118+
constexpr MapBuffer::Key CORNER_START_END = 11;
119+
constexpr MapBuffer::Key CORNER_START_START = 12;
116120

117121
inline void putOptionalFloat(
118122
MapBufferBuilder &builder,
@@ -122,7 +126,7 @@ inline void putOptionalFloat(
122126
}
123127

124128
MapBuffer convertBorderRadii(CascadedBorderRadii const &radii) {
125-
MapBufferBuilder builder(9);
129+
MapBufferBuilder builder(13);
126130
putOptionalFloat(builder, CORNER_TOP_LEFT, radii.topLeft);
127131
putOptionalFloat(builder, CORNER_TOP_RIGHT, radii.topRight);
128132
putOptionalFloat(builder, CORNER_BOTTOM_RIGHT, radii.bottomRight);
@@ -132,6 +136,10 @@ MapBuffer convertBorderRadii(CascadedBorderRadii const &radii) {
132136
putOptionalFloat(builder, CORNER_BOTTOM_END, radii.bottomEnd);
133137
putOptionalFloat(builder, CORNER_BOTTOM_START, radii.bottomStart);
134138
putOptionalFloat(builder, CORNER_ALL, radii.all);
139+
putOptionalFloat(builder, CORNER_END_END, radii.endEnd);
140+
putOptionalFloat(builder, CORNER_END_START, radii.endStart);
141+
putOptionalFloat(builder, CORNER_START_END, radii.startEnd);
142+
putOptionalFloat(builder, CORNER_START_START, radii.startStart);
135143
return builder.build();
136144
}
137145

ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,7 @@ void YogaLayoutableShadowNode::swapLeftAndRightInViewProps(
772772
auto &props = const_cast<ViewProps &>(typedCasting);
773773

774774
// Swap border node values, borderRadii, borderColors and borderStyles.
775+
775776
if (props.borderRadii.topLeft.has_value()) {
776777
props.borderRadii.topStart = props.borderRadii.topLeft;
777778
props.borderRadii.topLeft.reset();

0 commit comments

Comments
 (0)