I see. In that case, I suggest NOT starting with shadcn/ui. Start here instead:
1. Build a simple component with React. Most probably a form.
2. Use the default input and button component. Make it work.
3. Realize the default button doesn’t look that great.
4. Add some Tailwind classes to the button, padding, font size, colors, just enough to make decent.
5. Add a second button, maybe a "Reset" or "Cancel". Style it. Keep building.
6. You'll start seeing a pattern. Repeating classes and props.
7. Move your two buttons to components/ui/button.tsx. Import and use in your form.
8. You now have a reusable button.tsx styled with Tailwind. Keep building.
9. Do the same for input, textarea and so on.
10. You're now building shadcn/ui.
Once you’ve done this, you’ll get it. For your next project, instead of doing the above again, you just run the following. It’s the exact same thing.
> npx shadcn add button input textarea
OH MY GODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
I don’t believe in OSS projects competing with one another. When I created ESLint, it wasn’t to compete with JSHint, it was to solve a previously unsolved problem (custom rules).
Make something useful. Keep findings ways to make it more useful. That’s it.
So excited. Just got a prototype of ESLint language plugins working. Successfully linted a JSON file with a custom rule, importantly, *without* having it go through the same logic that JavaScript uses, making it much more efficient and less error-prone.
If you're a plugin creator looking to upgrade your rules to work with both ESLint v9.x with backwards compatibility to ESLint v8.x, the new release of eslint-transforms can automate most of the work:
https://t.co/azxR08dKMf