How to Use TailView UI
Learn how to integrate TailView UI components into your Rails applications. Copy-paste ready code, customization options, and real-world examples.
Quick Navigation
Quick Start
1. Install Tailwind CSS
# Add to your Gemfile
gem "tailwindcss-rails"
# Install and setup
rails tailwindcss:install
          2. Copy Component Code
Browse the components in this app and copy the HTML you need:
- ✓ Visit any component page (e.g., /buttons)
 - ✓ Copy the HTML code from the examples
 - ✓ Paste into your Rails views
 - ✓ Customize colors and styles as needed
 
Copy & Paste Examples
Basic Button
<button class="bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors">
  Click me
</button>
          Success Alert
Success!
Your action was completed successfully.
<div class="bg-green-50 border border-green-200 rounded-lg p-4">
  <div class="flex">
    <div class="flex-shrink-0">
      <svg class="h-5 w-5 text-green-400" viewBox="0 0 20 20" fill="currentColor">
        <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
      </svg>
    </div>
    <div class="ml-3">
      <h3 class="text-sm font-medium text-green-800">Success!</h3>
      <div class="mt-2 text-sm text-green-700">
        <p>Your action was completed successfully.</p>
      </div>
    </div>
  </div>
</div>
          Card Component
Card Title
This is a simple card component with some content.
<div class="bg-white rounded-lg shadow-md p-6">
  <h3 class="text-lg font-semibold text-gray-900 mb-2">Card Title</h3>
  <p class="text-gray-600 mb-4">This is a simple card component with some content.</p>
  <button class="bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 transition-colors">
    Action Button
  </button>
</div>
          Customization Guide
Color Customization
Primary Colors
bg-blue-600
                  bg-green-600
                  bg-red-600
                  bg-yellow-500
                  Custom Brand Colors
/* Add to your Tailwind config */
module.exports = {
  theme: {
    extend: {
      colors: {
        brand: {
          primary: '#your-color',
          secondary: '#your-color'
        }
      }
    }
  }
}
              Size Customization
Button Sizes
Padding Classes
px-2 py-1 - Smallpx-4 py-2 - Mediumpx-6 py-3 - LargeBorder Radius
rounded - Smallrounded-lg - Mediumrounded-xl - LargeUsing ViewComponents
Install ViewComponent
# Add to your Gemfile
gem "view_component"
# Install
bundle install
          Using AlertComponent
# In your view
<%= render AlertComponent.new(
  variant: :success,
  title: "Success!",
  message: "Your action was completed successfully.",
  dismissible: true
) %>
# With custom classes
<%= render AlertComponent.new(
  variant: :error,
  message: "Something went wrong",
  class: "mb-4 custom-alert"
) %>
          Available Variants
Alert Variants
- • 
:success- Green theme - • 
:error- Red theme - • 
:warning- Yellow theme - • 
:info- Blue theme 
Options
- • 
dismissible: true- Add close button - • 
compact: true- Compact style - • 
show_icon: false- Hide icon - • 
class: "custom"- Custom CSS classes 
Stimulus Integration
Adding Interactivity
<!-- HTML with Stimulus controller -->
<div data-controller="alert" data-alert-auto-dismiss-value="5000">
  <%= render AlertComponent.new(
    variant: :info,
    message: "This alert will auto-dismiss in 5 seconds"
  ) %>
</div>
          Available Stimulus Controllers
Alert Controller
- • Auto-dismiss functionality
 - • Manual dismiss with close button
 - • Animation support
 
Tabs Controller
- • Tab switching
 - • Keyboard navigation
 - • ARIA support
 
Custom Stimulus Controller
// app/javascript/controllers/custom_controller.js
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
  static values = { 
    message: String,
    timeout: Number 
  }
  connect() {
    if (this.timeoutValue > 0) {
      setTimeout(() => {
        this.element.remove()
      }, this.timeoutValue)
    }
  }
  dismiss() {
    this.element.remove()
  }
}
          Real-World Examples
User Dashboard
<!-- app/views/dashboard/index.html.erb -->
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
  <!-- Welcome Alert -->
  <%= render AlertComponent.new(
    variant: :success,
    title: "Welcome back!",
    message: "You have 3 new notifications.",
    dismissible: true
  ) %>
  <!-- Stats Cards -->
  <div class="grid md:grid-cols-3 gap-6 mb-8">
    <div class="bg-white rounded-lg shadow-md p-6">
      <h3 class="text-lg font-semibold text-gray-900 mb-2">Total Users</h3>
      <p class="text-3xl font-bold text-blue-600">1,234</p>
    </div>
    <!-- More cards... -->
  </div>
  <!-- Action Buttons -->
  <div class="flex gap-4">
    <button class="bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 transition-colors">
      Add User
    </button>
    <button class="bg-gray-200 text-gray-800 px-6 py-3 rounded-lg hover:bg-gray-300 transition-colors">
      Export Data
    </button>
  </div>
</div>
          Form with Validation
<!-- app/views/users/new.html.erb -->
<%= form_with model: @user, local: true, class: "space-y-6" do |form| %>
  <!-- Error Alert -->
  <% if @user.errors.any? %>
    <%= render AlertComponent.new(
      variant: :error,
      title: "Please fix the following errors:",
      list_items: @user.errors.full_messages
    ) %>
  <% end %>
  <!-- Form Fields -->
  <div>
    <%= form.label :name, class: "block text-sm font-medium text-gray-700 mb-1" %>
    <%= form.text_field :name, 
        class: "w-full px-3 py-2 border border-gray-300 rounded-md focus:ring-blue-500 focus:border-blue-500" %>
  </div>
  <!-- Submit Button -->
  <div class="flex justify-end">
    <%= form.submit "Create User", 
        class: "bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors" %>
  </div>
<% end %>