Comments (4)
Found a more better alternative.
// type WithImportant<T> = T extends string ? `${T}${Important}${string}` : T;
// type WithImportant<T> = T extends string ? `${T}${Important}` & { __important?: true } : T;
type WithImportant<T extends U, U = any> = U extends string ? `${U}${Important}` & { __important?: true } : T;
Above code is neither (1) drops the performance, nor (2) pollutes the autocomplete.
With above code svelte-check
takes 12s to complete.
I think we can settle on this solution.
Also: this solution also makes gray.900!aaa
an invalid token. The original code did not raise type error on a such case, so this way we can have a more type safety.
If this code looks ok to maintainers, I'll file a pull request for this. Please have a look. Thanks.
from panda.
I've narrowed down the issue and identified the root cause.
type WithImportant<T> = T extends string ? `${T}${Important}${string}` : T;
// ^^^^^^^^^
If I remove the trailing ${string}
in the WithImportant<T>
definition, the perf problem instantly goes away.
I don't see why the trailing ${string}
is needed as there will be no token following the !
or !important
since they should be at the last position of the css value declaration. Is there something am I missing?
I found why: it is needed to hide it from typescript autocomplete. I think there's a way to hide it from autocomplete without sacrificing the performance. I'll update the issue if I find the way to do it.
from panda.
ohh, I had the feeling that branded types could solve this somehow but when I tried I couldnt find a working solution, glad you did !
this looks great, would you like to send a PR or would you prefer I do it ? I'd love to help/guide you if needed in the codebase if you want to contribute, no pressure if that's not the case you already helped a lot 🙏
if you want to contribute:
- make sure tests are still fine, feel free to update snapshots when needed
there are 3 files with typings test based on the generated files which are especially relevant to this issue:
https://github.com/chakra-ui/panda/blob/main/sandbox/codegen/__tests__/scenarios/strict.test.ts#L117-L144
same in this file and also this one
see the README in sandbox/codegen
for more infos
from panda.
Found a better alternative.
// type WithImportant<T> = T extends string ? `${T}${Important}${string}` : T;
type WithImportant<T> = T extends string ? `${T}${Important}` & { __important?: true } : T;
Above code is neither (1) drastically drops the performance, nor (2) pollutes the autocomplete.
With above code svelte-check
takes 21s to complete.
I'll keep find a better way that does not drop the performance at all.
Meanwhile, I think we can utilize the above code for now since 5m to 20s is still a huge improvement.
from panda.
Related Issues (20)
- 0.38.0 css runtime function missing `SystemStyleObject[]` for the css prop
- Deduplicate CSS variables created from color tokens HOT 2
- Issue with Panda CSS Generating Extra Tokens
- Add turbopack support on NextJS App
- Type error when merging imported styles HOT 2
- Explanation of "Targeting slots" has incorrect description.
- Panda config `jsxFactory` cause error HOT 1
- Feature: Have the ability to change the order of statically-generated styles
- "panda init -p" fails with "Missing script: "panda"" on fresh npx create-next-app HOT 1
- "pnpm panda init --postcss" fails with "Could not resolve "@pandacss/dev""
- Perf regression on v0.38.0 for HMR on Storybook + Vite
- Improve gradient documentation (bgGradient, gradientViaPosition...)
- Due to Safari 14 not supporting @layer, the application styles fail. HOT 2
- Why can't I use color in textStyles? Actually it has the wrong type
- strictTokens and strictPropertyValues not throwing errors in Next.js HOT 1
- Documentation on Operational Levels
- When `jsxStyleProps=none`, components from `styled-system/jsx` are recreated on every render
- Rem Issues
- 🐛 Enable box shadow color change
- Wrong styled prop types with jsxStyleProps set to none or minimal HOT 2
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 panda.