Functional typed classnames for TailwindCSS
Functional typed classnames for TailwindCSS
Functional typed classnames for TailwindCSS
TailwindCSS is a CSS library that has gained a lot of traction. The developer experience is pretty epic and you ensure a low footprint on your css by composing existing classes for most of your css.
TailwindCSS is based on strings and with some nice tooling on top like TailwindCSS VSCode extension you get a pretty descent experience. That said, there are limitations to a purely declarative approach of strings. When using tailwindcss-classnames you will get additional power in the form of:
You can not get this experience using pure TailwindCSS and the VSCode extension, but you do get it with tailwindcss-classnames.
Please follow the guide to set up TailwindCSS. Now do:
npm install tailwindcss-classnames
NOTE: This project versions match with TailwindCSS versions except for semver patch releases
The project is literally the clsx project with custom typing. That means it arrives at your browser at approximately 2.7kB minified and gzipped (bundlephobia).
Way better performance overall (thanks to @dylanvann's idea and suggestions):
// App.tsx import * as React from "react"; import * as styles from "./styles";
export const App: React.FC = ({ disabled }) => { return (
Submit
Cancel
);
};
…
json "scripts": { "generate-css-types": "tailwindcss-classnames -i path/to/tailwind.config.js -o path/to/output-file.ts" }
**⚠️ NOTE:** that if you want to add custom types from external file, the type must be a default export:
```ts
export default MyCustomType;
type MyCustomType =
| "btn"
| "sidebar"
...
import the generated file (and NOT the actual library) into your code in order to get the customized classnames, like this:
import { classnames } from "path/to/generated/tailwindcss-classnames";
A more elegant approach is to add the generated file to your projects tsconfig.json compilerOptions paths which should allow you to keep the import the same and use your generated version of tailwindcss-classnames instead of the node_modules one.
{
"compilerOptions": {
"paths": {
"tailwindcss-classnames": ["path/to/generated/tailwindcss-classnames"]
}
}
}
then:
import { classnames } from "tailwindcss-classnames";
From original comment by @andykenward
__dirname instead. See #120 .npx tailwindcss-classnames won't work. Use as an npm script as mentioned above.Any help with these issues is very much appreciated.
All contributions from everyone are very welcome.
Please read the contributing guidelines before submitting a Pull Request.
This project was started by Christian Alfoni and is now maintained by Muhammad Sammy. The full list of contributors can be found here.
No open issues yet, or sync has not completed.