README.md in shadcn-ui-0.0.4 vs README.md in shadcn-ui-0.0.5
- old
+ new
@@ -1,12 +1,15 @@
# shadcn/ui on Rails
[![Gem Version](https://badge.fury.io/rb/shadcn-ui.svg)](https://badge.fury.io/rb/shadcn-ui)
-Accessible and customizable components that you can copy and paste into your apps. Free. Open
-Source. **Use this to build your own component library**.
+[Shadcn on Rails](https://shadcn.rails-components.com) provides customizable components that you can
+copy and paste into your apps. Free. Open Source. **Use this to build your own component library**.
+**If you're using this, [please let me know](https://twitter.com/aviflombaum) so I keep developing
+it.**
+
## About
This is **NOT** a component library. It's a collection of re-usable components that you can copy and
paste into your apps.
@@ -19,324 +22,20 @@
Use this as a reference to build your own component libraries.
![hero](public/og.jpg)
-## Alpha Usage/Installation
+## Installation
-Prior to the initial gem release, you can use this as an alpha by cloning this repository and
-starting up the app as you would a standard rails app.
+Refer to
+[Installation](https://github.com/aviflombaum/shadcn-rails/blob/main/app/views/documentation/installation.html.md)
+or the [Installation](https://shadcn.rails-components.com/docs/installation) page on the demo site.
-```
-git clone https://github.com/aviflombaum/shadcn-rails.git
-cd shadcn-rails
-bundle install
-./bin/dev
-```
+## Development
-There are very few dependencies and no database so it should just boot up. Visit
-http://localhost:3000 to see the demo app which is also the documentation. You'll be able to browse
-the components at http://localhost:3000/components.
-
-If there's a component you want to try in your app, you will be copying the code from this app to
-yours. There's a few other steps you'll need.
-
-## Installing a Component
-
-### Add Tailwind CSS
-
-Components are styled using Tailwind CSS. You need to install Tailwind CSS in your project.
-
-[Follow the Tailwind CSS installation instructions to get started.](https://tailwindcss.com/docs/installation)
-
-### Add dependencies
-
-If you haven't already, install Tailwind into your rails application by adding `tailwindcss-rails`
-to your `Gemfile` and install tailwind into your app:
-
-```sh
-./bin/bundle add tailwindcss-rails
-./bin/rails tailwindcss:install
-```
-
-Then install ./bin/rails tailwindcss:install
-
-### Configure tailwind.config.js
-
-Here's what my `tailwind.config.js` file looks like:
-
-```js title="tailwind.config.js"
-const defaultTheme = require("tailwindcss/defaultTheme");
-
-module.exports = {
- darkMode: ["class"],
- content: [
- "./public/*.html",
- "./app/helpers/**/*.rb",
- "./app/javascript/**/*.js",
- "./app/views/**/*.{erb,haml,html,slim}",
- ],
- theme: {
- container: {
- center: true,
- padding: "2rem",
- screens: {
- "2xl": "1400px",
- },
- },
- extend: {
- colors: {
- border: "hsl(var(--border))",
- input: "hsl(var(--input))",
- ring: "hsl(var(--ring))",
- background: "hsl(var(--background))",
- foreground: "hsl(var(--foreground))",
- primary: {
- DEFAULT: "hsl(var(--primary))",
- foreground: "hsl(var(--primary-foreground))",
- },
- secondary: {
- DEFAULT: "hsl(var(--secondary))",
- foreground: "hsl(var(--secondary-foreground))",
- },
- destructive: {
- DEFAULT: "hsl(var(--destructive))",
- foreground: "hsl(var(--destructive-foreground))",
- },
- muted: {
- DEFAULT: "hsl(var(--muted))",
- foreground: "hsl(var(--muted-foreground))",
- },
- accent: {
- DEFAULT: "hsl(var(--accent))",
- foreground: "hsl(var(--accent-foreground))",
- },
- popover: {
- DEFAULT: "hsl(var(--popover))",
- foreground: "hsl(var(--popover-foreground))",
- },
- card: {
- DEFAULT: "hsl(var(--card))",
- foreground: "hsl(var(--card-foreground))",
- },
- },
- borderRadius: {
- lg: `var(--radius)`,
- md: `calc(var(--radius) - 2px)`,
- sm: "calc(var(--radius) - 4px)",
- },
- fontFamily: {
- sans: ["var(--font-sans)", ...defaultTheme.fontFamily.sans],
- },
- keyframes: {
- "accordion-down": {
- from: { height: 0 },
- to: { height: "var(--radix-accordion-content-height)" },
- },
- "accordion-up": {
- from: { height: "var(--radix-accordion-content-height)" },
- to: { height: 0 },
- },
- },
- animation: {
- "accordion-down": "accordion-down 0.2s ease-out",
- "accordion-up": "accordion-up 0.2s ease-out",
- },
- },
- },
- plugins: [
- require("@tailwindcss/forms"),
- require("@tailwindcss/aspect-ratio"),
- require("@tailwindcss/typography"),
- require("@tailwindcss/container-queries"),
- require("tailwindcss-animate"),
- ],
-};
-```
-
-### Configure styles
-
-Add the following to your app/assets/stylesheets/application.tailwind.css file.
-
-```css title="application.tailwind.css"
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-@layer base {
- :root {
- --background: 0 0% 100%;
- --foreground: 222.2 47.4% 11.2%;
-
- --muted: 210 40% 96.1%;
- --muted-foreground: 215.4 16.3% 46.9%;
-
- --popover: 0 0% 100%;
- --popover-foreground: 222.2 47.4% 11.2%;
-
- --border: 214.3 31.8% 91.4%;
- --input: 214.3 31.8% 91.4%;
-
- --card: 0 0% 100%;
- --card-foreground: 222.2 47.4% 11.2%;
-
- --primary: 222.2 47.4% 11.2%;
- --primary-foreground: 210 40% 98%;
-
- --secondary: 210 40% 96.1%;
- --secondary-foreground: 222.2 47.4% 11.2%;
-
- --accent: 210 40% 96.1%;
- --accent-foreground: 222.2 47.4% 11.2%;
-
- --destructive: 0 100% 50%;
- --destructive-foreground: 210 40% 98%;
-
- --ring: 215 20.2% 65.1%;
-
- --radius: 0.5rem;
- }
-
- .dark {
- --background: 224 71% 4%;
- --foreground: 213 31% 91%;
-
- --muted: 223 47% 11%;
- --muted-foreground: 215.4 16.3% 56.9%;
-
- --accent: 216 34% 17%;
- --accent-foreground: 210 40% 98%;
-
- --popover: 224 71% 4%;
- --popover-foreground: 215 20.2% 65.1%;
-
- --border: 216 34% 17%;
- --input: 216 34% 17%;
-
- --card: 224 71% 4%;
- --card-foreground: 213 31% 91%;
-
- --primary: 210 40% 98%;
- --primary-foreground: 222.2 47.4% 1.2%;
-
- --secondary: 222.2 47.4% 11.2%;
- --secondary-foreground: 210 40% 98%;
-
- --destructive: 0 63% 31%;
- --destructive-foreground: 210 40% 98%;
-
- --ring: 216 34% 17%;
-
- --radius: 0.5rem;
- }
-}
-
-@layer base {
- * {
- @apply border-border;
- }
- body {
- @apply bg-background text-foreground;
- font-feature-settings:
- "rlig" 1,
- "calt" 1;
- }
-}
-```
-
-### Copy a a component's files to your application
-
-For example, if you want to use the Accordion component, you would copy the following files to your
-application:
-
-- `app/javascript/controllers/components/ui/accordion_controller.js` The Stimulus controller for any
- component that requires javascript.
-- `app/helpers/components/accordion_helper.rb` The helper for the component that allows for easy
- rendering within views.
-- `app/views/components/ui/_accordion.html.erb` The html for the component.
-
-Once those are copied in your application you can render an accordion with:
-
-```erb
-<%= render_accordion title: "Did you know?", description: "You can wrap shadcn helpers in any
- component library you want!" %>
-<%= render_accordion title: "Use the generators.", description: "Add components with #{code("rails g shadcn_ui add accordion")}".html_safe %>
-```
-
-See the component's demo page in `app/views/examples/components/accordion.html.erb` for more
-examples.
-
-This will be similar for each component.
-
-## Documentation
-
-Visit https://avi.nyc/shadcn-on-rails to view the documentation.
-
-## Contributing
-
-I am desperately seeking contributors to this project as it is in the very early stages.
-
-### Contributing with Issues
-
-I am looking for people to start documenting issues in the project. The issues I'm interested in
-are:
-
-1. What components are missing? Just start listing out the components that have yet to be
- implemented, better yet, open a PR with a branch for that issue and we can all start adding to
- it.
-2. What components are not accessible? I am not an accessibility expert, so I need help with this.
- If you see something that is not accessible, please open an issue and let me know. This might
- mean the aria labels are hardcoded and not customizable or that the labels are simply missing.
-3. What components are not customizable? I am trying to make all components as customizable as
- possible. If you see something that is not customizable, please open an issue and let me know.
- All the attributes of a component, like aria labels or classes or id or name, etc, should be
- customizeable by passing attributes into their helper functions that are passed down to the
- component's partial to be rendered.
-4. Suggestions for the API of the components. I am trying to make the API as simple as possible. If
- you have any suggestions for how to make the API simpler, please open an issue and let me know. I
- am open to any and all suggestions.
-
-These are 3 main areas that would make the project easier for people to contribute to. They all make
-for great opportunities for someone new to open source to both file the issue and even begin to
-slowly implement them.
-
-### Setup
-
-1. Fork and clone the repo.
-2. Run `bundle install` to install dependencies, there aren't many as this is currently a standard
- Rails applications.
-3. `/bin/dev` to start the application.
-
-### App Structure
-
-For now this is a standard Rails 7 application using propshaft and **importmaps**. This will soon be
-extracted into a gem that provides the components to be installed (copied) into the including
-application.
-
-### Components
-
-The goal of this project is to provide a set of components that can be copied into your application.
-The components are built using [TailwindCSS](https://tailwindcss.com/) and
-[Stimulus](https://stimulus.hotwire.dev/). Each component follows the same structure:
-
-1. There is a component partial located in `app/views/components/ui` that is rendered by the
- component helper. Ex `app/views/components/ui/_button.html.erb` provides the markup for the
- button component.
-2. There is a component helper named after the component that is responsible for rendering the
- component and taking in arguments to customize the component located in `app/helpers/components`.
- Ex `app/helpers/components/button.rb` provides the `render_button` helper that accepts arguments
- such as `variant` which describes the kind of button and passes the classes for that `variant` to
- the partial.
-3. When needed there is a stimulus controller for the component that provides the javascript
- required to make the component interactive. Ex. `app/javascript/controllers/toast_controller.js`
- provides the javascript for the toast component to display it and then hide it after a certain
- amount of time.
-
-This demo application also included examples of how to use the components in
-`app/views/examples/components`. This is used to create the documentation site that this application
-provides with examples of teh components rendered.
-
-For now, this convention should be followed when developing new components.
+Clone the repo and run `bin/setup` to install dependencies. Then, run `bin/dev` to start the
+tailwind watcher and then run `rails s`. I have to run the server and tailwind separately to keep
+debuggers working.
## [shadcn-ui](https://ui.shadcn.com)
These components are based on the components provided by [shadcn/ui](https://ui.shadcn.com). Because
`shadcn-ui` is so heavily reliant on Radix and React, these components are most likely not going to