@@ -10,7 +10,12 @@ import type {
1010 SpacingSpaceScale ,
1111} from '@shopify/polaris-tokens' ;
1212
13- import { classNames , sanitizeCustomProperties } from '../../utilities/css' ;
13+ import {
14+ getResponsiveProps ,
15+ ResponsiveProp ,
16+ classNames ,
17+ sanitizeCustomProperties ,
18+ } from '../../utilities/css' ;
1419
1520import styles from './Box.scss' ;
1621
@@ -42,6 +47,8 @@ export type BorderTokenAlias =
4247 | 'divider-on-dark'
4348 | 'transparent' ;
4449
50+ type Spacing = ResponsiveProp < SpacingSpaceScale > ;
51+
4552interface Border {
4653 blockStart : BorderTokenAlias ;
4754 blockEnd : BorderTokenAlias ;
@@ -75,13 +82,6 @@ interface BorderRadius {
7582 endEnd : BorderRadiusTokenScale ;
7683}
7784
78- interface Spacing {
79- blockStart : SpacingSpaceScale ;
80- blockEnd : SpacingSpaceScale ;
81- inlineStart : SpacingSpaceScale ;
82- inlineEnd : SpacingSpaceScale ;
83- }
84-
8585interface BorderWidth {
8686 blockStart : ShapeBorderWidthScale ;
8787 blockEnd : ShapeBorderWidthScale ;
@@ -139,15 +139,15 @@ export interface BoxProps {
139139 /** Clip vertical content of children */
140140 overflowY ?: Overflow ;
141141 /** Spacing around children */
142- padding ?: SpacingSpaceScale ;
142+ padding ?: Spacing ;
143143 /** Vertical start spacing around children */
144- paddingBlockStart ?: SpacingSpaceScale ;
144+ paddingBlockStart ?: Spacing ;
145145 /** Vertical end spacing around children */
146- paddingBlockEnd ?: SpacingSpaceScale ;
146+ paddingBlockEnd ?: Spacing ;
147147 /** Horizontal start spacing around children */
148- paddingInlineStart ?: SpacingSpaceScale ;
148+ paddingInlineStart ?: Spacing ;
149149 /** Horizontal end spacing around children */
150- paddingInlineEnd ?: SpacingSpaceScale ;
150+ paddingInlineEnd ?: Spacing ;
151151 /** Shadow */
152152 shadow ?: DepthShadowAlias ;
153153 /** Set width of container */
@@ -215,13 +215,6 @@ export const Box = forwardRef<HTMLElement, BoxProps>(
215215 inlineEnd : borderInlineEndWidth ,
216216 } as BorderWidth ;
217217
218- const paddings = {
219- blockEnd : paddingBlockEnd ,
220- inlineStart : paddingInlineStart ,
221- inlineEnd : paddingInlineEnd ,
222- blockStart : paddingBlockStart ,
223- } as Spacing ;
224-
225218 const style = {
226219 '--pc-box-color' : color ? `var(--p-${ color } )` : undefined ,
227220 '--pc-box-background' : background ? `var(--p-${ background } )` : undefined ,
@@ -273,19 +266,31 @@ export const Box = forwardRef<HTMLElement, BoxProps>(
273266 '--pc-box-max-width' : maxWidth ,
274267 '--pc-box-overflow-x' : overflowX ,
275268 '--pc-box-overflow-y' : overflowY ,
276- '--pc-box-padding' : padding ? `var(--p-space-${ padding } )` : undefined ,
277- '--pc-box-padding-block-end' : paddings . blockEnd
278- ? `var(--p-space-${ paddings . blockEnd } )`
279- : undefined ,
280- '--pc-box-padding-inline-start' : paddings . inlineStart
281- ? `var(--p-space-${ paddings . inlineStart } )`
282- : undefined ,
283- '--pc-box-padding-inline-end' : paddings . inlineEnd
284- ? `var(--p-space-${ paddings . inlineEnd } )`
285- : undefined ,
286- '--pc-box-padding-block-start' : paddings . blockStart
287- ? `var(--p-space-${ paddings . blockStart } )`
288- : undefined ,
269+ ...getResponsiveProps ( 'box' , 'padding' , 'space' , padding ) ,
270+ ...getResponsiveProps (
271+ 'box' ,
272+ 'padding-block-end' ,
273+ 'space' ,
274+ paddingBlockEnd ,
275+ ) ,
276+ ...getResponsiveProps (
277+ 'box' ,
278+ 'padding-block-start' ,
279+ 'space' ,
280+ paddingBlockStart ,
281+ ) ,
282+ ...getResponsiveProps (
283+ 'box' ,
284+ 'padding-inline-start' ,
285+ 'space' ,
286+ paddingInlineStart ,
287+ ) ,
288+ ...getResponsiveProps (
289+ 'box' ,
290+ 'padding-inline-end' ,
291+ 'space' ,
292+ paddingInlineEnd ,
293+ ) ,
289294 '--pc-box-shadow' : shadow ? `var(--p-shadow-${ shadow } )` : undefined ,
290295 '--pc-box-width' : width ,
291296 } as React . CSSProperties ;
0 commit comments