@@ -13,6 +13,7 @@ import overlay, { isAnimatedValue } from '../styles/overlay';
13
13
import shadow from '../styles/shadow' ;
14
14
import type { ThemeProp , MD3Elevation } from '../types' ;
15
15
import { forwardRef } from '../utils/forwardRef' ;
16
+ import { splitStyles } from '../utils/splitStyles' ;
16
17
17
18
export type Props = React . ComponentPropsWithRef < typeof View > & {
18
19
/**
@@ -229,10 +230,34 @@ const Surface = forwardRef<View, Props>(
229
230
start,
230
231
end,
231
232
flex,
233
+ width,
234
+ height,
232
235
...restStyle
233
236
} = ( StyleSheet . flatten ( style ) || { } ) as ViewStyle ;
234
237
235
- const absoluteStyles = {
238
+ const [ filteredStyle , borderRadiusStyle , marginStyle , paddingStyle ] =
239
+ splitStyles (
240
+ restStyle ,
241
+ ( style ) => style . startsWith ( 'border' ) && style . endsWith ( 'Radius' ) ,
242
+ ( style ) => style . startsWith ( 'margin' ) ,
243
+ ( style ) => style . startsWith ( 'padding' )
244
+ ) ;
245
+
246
+ const sharedStyles = {
247
+ flex : height ? 1 : undefined ,
248
+ ...borderRadiusStyle ,
249
+ } ;
250
+
251
+ const middleLayerViewStyles = [
252
+ sharedStyles ,
253
+ {
254
+ backgroundColor,
255
+ } ,
256
+ ] ;
257
+
258
+ const innerLayerViewStyles = [ filteredStyle , sharedStyles , paddingStyle ] ;
259
+
260
+ const outerLayerViewStyles = {
236
261
position,
237
262
alignSelf,
238
263
top,
@@ -241,14 +266,13 @@ const Surface = forwardRef<View, Props>(
241
266
left,
242
267
start,
243
268
end,
269
+ flex,
270
+ width,
271
+ height,
272
+ ...borderRadiusStyle ,
273
+ ...marginStyle ,
244
274
} ;
245
275
246
- const sharedStyle = [ { backgroundColor, flex } , restStyle ] ;
247
-
248
- const innerLayerViewStyles = [ { flex } ] ;
249
-
250
- const outerLayerViewStyles = [ absoluteStyles , innerLayerViewStyles ] ;
251
-
252
276
if ( isAnimatedValue ( elevation ) ) {
253
277
const inputRange = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
254
278
@@ -280,10 +304,14 @@ const Surface = forwardRef<View, Props>(
280
304
testID = { `${ testID } -outer-layer` }
281
305
>
282
306
< Animated . View
283
- style = { [ getStyleForAnimatedShadowLayer ( 1 ) , innerLayerViewStyles ] }
284
- testID = { `${ testID } -inner -layer` }
307
+ style = { [ getStyleForAnimatedShadowLayer ( 1 ) , middleLayerViewStyles ] }
308
+ testID = { `${ testID } -middle -layer` }
285
309
>
286
- < Animated . View { ...props } testID = { testID } style = { sharedStyle } >
310
+ < Animated . View
311
+ { ...props }
312
+ testID = { testID }
313
+ style = { innerLayerViewStyles }
314
+ >
287
315
{ children }
288
316
</ Animated . View >
289
317
</ Animated . View >
@@ -312,10 +340,14 @@ const Surface = forwardRef<View, Props>(
312
340
testID = { `${ testID } -outer-layer` }
313
341
>
314
342
< Animated . View
315
- style = { [ getStyleForShadowLayer ( 1 ) , innerLayerViewStyles ] }
316
- testID = { `${ testID } -inner -layer` }
343
+ style = { [ getStyleForShadowLayer ( 1 ) , middleLayerViewStyles ] }
344
+ testID = { `${ testID } -middle -layer` }
317
345
>
318
- < Animated . View { ...props } testID = { testID } style = { sharedStyle } >
346
+ < Animated . View
347
+ { ...props }
348
+ testID = { testID }
349
+ style = { innerLayerViewStyles }
350
+ >
319
351
{ children }
320
352
</ Animated . View >
321
353
</ Animated . View >
0 commit comments