Comments (3)
Thanks for posting this bug, I've seen the issue too and I haven't settled on a good solution yet.
Here's the broken transformation:
const BrokenInput = (props) => (
<input css={{ ...(props.hasHover && tw`block`) }} /> // < Any conditionals like `props` here will lose their reference
)
// ↓ ↓ ↓ ↓ ↓ ↓
import { styled } from "solid-styled-components";
const TwComponent = styled("input")({
...(props.hasHover && { "display": "block" }) // < `props` reference is lost
});
const BrokenInput = props => <TwComponent />; // < `props` isn't passed to the component
The css prop doesn't exist in solid-styled-components so twin converts the element into a styled component.
The problem is that during that process all the variables used in the conditional are severed and rather than chasing a complex solution in babel I'm looking into adding a new conversion type instead.
The new conversion for the css prop would use the css import from solid-styled-components:
const BrokenInput = (props) => (
<input css={{ ...(props.hasHover && tw`block`) }} />
)
// ↓ ↓ ↓ ↓ ↓ ↓
import { css } from "solid-styled-components";
const BrokenInput = props => (
<input class={css({ ...(props.hasHover && { display: "block" }) })} />
)
This option would simplify the conversion and the conditionals wouldn't be affected.
One issue is that if there's already a class on the element then a merge needs to happen - perhaps something as simple as this would work:
<input class="box" css={{ ... }} />
// ↓ ↓ ↓ ↓ ↓ ↓
<input class={"box " + css({ ... }) } />
and if css is defined before the class attribute:
<input css={{ ... }} class="box" />
// ↓ ↓ ↓ ↓ ↓ ↓
<input class={css({ ... }) + " box" } />
from twin.macro.
Thanks for the explanation. Would Solid's classList
help with that merge?
<div classList={{ ...{ [css`color: rebeccapurple;`]: true }, ...{ myClass: true, otherClass: false } }}>My text</div>
from twin.macro.
mark. same problem.
from twin.macro.
Related Issues (20)
- Support for @headlessui/tailwindcss prefixes in inner classes HOT 2
- the name `_GlobalStyles` is defined multiple times HOT 1
- Unable to clone and style existing components with Stitches using standard syntax HOT 3
- Doesn't work with CodeSandbox React template HOT 1
- CSS `calc` with more than 2 `theme` keywords HOT 1
- Can't resolve 'v8' (Twin + Next.js + Styled Components) HOT 9
- Twin Macro Doesn't Work With Next.js (A Working Example Would Solve This) HOT 6
- Dynamic is not working as expected in next-emotion-typescript HOT 2
- Module not found: Can't resolve 'v8' HOT 3
- Property 'cs' is missing in type.... HOT 2
- Next 14 layout shift (maybe css load after render) HOT 2
- Jest testing (typescript) - twin_macro_1.theme is not a function HOT 2
- Errors in vite 5.0.0 HOT 1
- TypeScript type error with TwImportComponent in jest-testing-typescript
- CSS fallback values from Tailwind config `extend` are missing HOT 2
- Props don't get passed down when composing components HOT 5
- Custom Tailwind Properties in Twin.macro not working HOT 1
- Storybook v8 not working in combination with Styled Components and twin.macro HOT 3
- Min-Width not validating HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from twin.macro.