Dynamic components
Dynamic components mean components that generate styles based on their props. You can derive styles from props, apply conditionally a variant or any other logic.
styled.{{tag}} allows to be defined by a function, where it should return a string. This function is going to be available as props API for that component, including all props from the element. Like following:
module Dynamic = %styled.div(
(~color, ~background) => `
color: $(color);
background-color: $(background);
`
)
<Dynamic color=CssJs.hex("#EB5757") background=CssJs.hex("#516CF0")>
{React.string("Hello!")}
</Dynamic>module Dynamic = %styled.div(
(~color, ~background) => `
color: $(color);
background-color: $(background);
`
)
<Dynamic color=CssJs.hex("#EB5757") background=CssJs.hex("#516CF0")>
{React.string("Hello!")}
</Dynamic>All rules from Interpolation are applied here. In the example, color and background are CssJs.Color.tCssJs.Color.t since it gets inferred from the CSS property. It's called type holes https://twitter.com/davesnx/status/1552305210558742528
Collision
If you create a dynamic component with a prop that collides with the name of a React prop, it will override it.
For example if your dynamic component is defined with a prop "size" it will override size from makeProps. This mechanism is to ensure that you can name your props the way you want it.