Skip to content

Commit 7527124

Browse files
committed
Fix prop issue
1 parent 92632f8 commit 7527124

File tree

5 files changed

+728
-15
lines changed

5 files changed

+728
-15
lines changed

src/codegen/Codegen.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { getComponentName } from '../utils'
22
import { getProps } from './props'
3-
import { getSelectorProps, sanitizePropertyName } from './props/selector'
3+
import { getSelectorProps } from './props/selector'
44
import { renderComponent, renderNode } from './render'
55
import { renderText } from './render/text'
66
import type { ComponentTree, NodeTree } from './types'
77
import { checkAssetNode } from './utils/check-asset-node'
88
import { checkSameColor } from './utils/check-same-color'
9+
import { extractInstanceVariantProps } from './utils/extract-instance-variant-props'
910
import {
1011
getDevupComponentByNode,
1112
getDevupComponentByProps,
@@ -139,15 +140,7 @@ export class Codegen {
139140
const componentName = getComponentName(mainComponent || node)
140141

141142
// Extract variant props from instance's componentProperties
142-
const variantProps: Record<string, string> = {}
143-
if (node.componentProperties) {
144-
for (const [key, prop] of Object.entries(node.componentProperties)) {
145-
if (prop.type === 'VARIANT') {
146-
const sanitizedKey = sanitizePropertyName(key)
147-
variantProps[sanitizedKey] = String(prop.value)
148-
}
149-
}
150-
}
143+
const variantProps = extractInstanceVariantProps(node)
151144

152145
// Check if needs position wrapper
153146
if (props.pos) {

src/codegen/responsive/ResponsiveCodegen.ts

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)