StyleX adds logical properties classes when it should not #796
Description
Describe the issue
Related to #752.
This was very confusing for me to discover. I believe StyleX has a bug when replacing logical properties.
See the following code for example:
import * as stylex from "@stylexjs/stylex";
import { CSSPropertiesWithExtras } from "@stylexjs/stylex/lib/StyleXTypes";
const styles = stylex.create({
idea: (args: { width?: CSSPropertiesWithExtras["width"] }) => ({
width: args.width,
}),
});
export function Idea() {
return (
<div {...stylex.props(styles.idea({ width: 64 }))}>
<div {...stylex.props(styles.idea({}))}>Hello</div>
</div>
);
}
Output (this is correct)::
<div class="idea__styles.idea width-x1bl4301" style="--width: 64px;">
<div class="idea__styles.idea">Hello</div>
</div>
Now see what happens when we use inline-size
instead of width
:
import * as stylex from "@stylexjs/stylex";
import { CSSPropertiesWithExtras } from "@stylexjs/stylex/lib/StyleXTypes";
const styles = stylex.create({
idea: (args: { inlineSize?: CSSPropertiesWithExtras["inlineSize"] }) => ({
inlineSize: args.inlineSize,
}),
});
export function Idea() {
return (
<div {...stylex.props(styles.idea({ inlineSize: 64 }))}>
<div {...stylex.props(styles.idea({}))}>Hello</div>
</div>
);
}
Output (I believe this is incorrect):
<div class="idea__styles.idea width-x1avlqir" style="--inlineSize: 64px;">
<div class="idea__styles.idea width-x1avlqir">Hello</div>
^^^^^^^^^^^^^^
</div>
When using logical properties, it looks like StyleX is adding the class when it should not, because in this case inlineSize
is undefined
and therefore the class should be omitted altogether. This was causing me a lot of problems because it took me a while to figure out it seems to be a side effect of logical properties and not all properties.
I'll try disabling styleResolution: 'legacy-expand-shorthands'
and see if this problem goes away on its own.
Expected behavior
See above
Steps to reproduce
See above
Test case
No response
Additional comments
No response