Open danieldelcore opened 4 years ago
Complete example:
/** @jsx jsx */
import css from '@trousers/core';
import jsx from '@trousers/react';
import createTheme from '@trousers/theme';
const theme = createTheme({
default: 'blue,
primary: 'red',
});
const styles = css('button', `
background-color: var(--theme-default);
`)
.modifier('primary')`
background-color: var(--theme-primary);
`;
const Button = props => {
return <button
css={styles}
primary={props.primary}
theme={theme}
>
{props.children}
</button>;
};
export default Button;
Precursor integration notes:
Could the macro support this?
const styles: CSSProperties = {};
if (start) {
styles.gridColumnStart = start;
}
if (end) {
styles.gridColumnEnd = end;
}
if (span) {
styles.gridColumnEnd = `span ${span}`;
}
return <div css={styles}>{children}</div>;
It could, potentially with an additive API. styles.append('element', 'gridColumnEnd', 'span 5')
Macro dynamic interpolation edge case:
css('Stack', {
display: 'grid',
gridTemplateColumns: 'repeat(1, 1fr)',
gap: `var(--space-${gap})`, // We need to be able to detect this
width: '100%',
})
Improvements ✅
Challenges ❌
Themes should now be mounted as classnames of css vars. Rather than depending on costly react context, we'll apply themes via a classname and css vars. The themes will be mounted to the head just like any other style.
For example:
is mounted as:
which is applied to a button like so: