@@ -99,6 +99,19 @@ export class ResponsiveCodegen {
9999
100100 // If node is INSTANCE or COMPONENT, render as component reference
101101 if ( firstTree . isComponent ) {
102+ // Position props that may need responsive merging
103+ const positionPropKeys = [
104+ 'pos' ,
105+ 'top' ,
106+ 'left' ,
107+ 'right' ,
108+ 'bottom' ,
109+ 'display' ,
110+ ]
111+
112+ // Reserved variant keys that should not be passed as props (internal use only)
113+ const reservedVariantKeys = [ 'effect' , 'viewport' ]
114+
102115 // For components, we might still need position props
103116 const propsMap = new Map < BreakpointKey , Props > ( )
104117 for ( const [ bp , tree ] of treesByBreakpoint ) {
@@ -111,15 +124,35 @@ export class ResponsiveCodegen {
111124 if ( tree . props . display ) posProps . display = tree . props . display
112125 propsMap . set ( bp , posProps )
113126 }
114- const mergedProps = mergePropsToResponsive ( propsMap )
127+ const mergedPositionProps = mergePropsToResponsive ( propsMap )
128+
129+ // Extract variant props (non-position props) - these are Instance variant values
130+ // They should be the same across breakpoints, so just use firstTree
131+ // Filter out reserved variant keys (effect, viewport) which are used internally
132+ const variantProps : Props = { }
133+ for ( const [ key , value ] of Object . entries ( firstTree . props ) ) {
134+ const lowerKey = key . toLowerCase ( )
135+ const isPositionProp = positionPropKeys . includes ( key )
136+ const isReservedVariant = reservedVariantKeys . some (
137+ ( r ) => lowerKey === r ,
138+ )
139+ if ( ! isPositionProp && ! isReservedVariant ) {
140+ variantProps [ key ] = value
141+ }
142+ }
115143
116144 // If component has position props, wrap in Box
117- if ( Object . keys ( mergedProps ) . length > 0 ) {
118- const componentCode = renderNode ( firstTree . component , { } , 0 , [ ] )
119- return renderNode ( 'Box' , mergedProps , depth , [ componentCode ] )
145+ if ( Object . keys ( mergedPositionProps ) . length > 0 ) {
146+ const componentCode = renderNode (
147+ firstTree . component ,
148+ variantProps ,
149+ 0 ,
150+ [ ] ,
151+ )
152+ return renderNode ( 'Box' , mergedPositionProps , depth , [ componentCode ] )
120153 }
121154
122- return renderNode ( firstTree . component , { } , depth , [ ] )
155+ return renderNode ( firstTree . component , variantProps , depth , [ ] )
123156 }
124157
125158 // Handle WRAPPER nodes (position wrapper for components)
0 commit comments