README.md

# LiveJoyride

A guided tour component for Phoenix LiveView applications. Create interactive step-by-step tours to onboard users or highlight features.

## Features

- Pure Elixir/LiveView implementation - no external JS dependencies
- Customizable styling via Tailwind CSS classes
- Spotlight effect highlights target elements
- Responsive tooltip positioning
- Progress tracking (step X of Y)
- Back/Next/Done navigation

## Installation

Add `live_joyride` to your dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:live_joyride, "~> 0.1.0"}
  ]
end
```

Then add the JavaScript hook to your `app.js`:

```javascript
import { Joyride } from "live_joyride"

let liveSocket = new LiveSocket("/live", Socket, {
  hooks: { Joyride, ...otherHooks }
})
```

If you installed via Hex, the JS is at:
```javascript
import { Joyride } from "../deps/live_joyride/assets/js"
```

## Usage

### 1. Mark target elements

Add `data-joyride` attributes to elements you want to highlight:

```heex
<div data-joyride="welcome-section">
  Welcome to our app!
</div>

<button data-joyride="submit-btn">Submit</button>
```

### 2. Add the component to your LiveView

```heex
<.live_component
  module={LiveJoyride.Component}
  id="tour"
  steps={[
    %{target: "welcome-section", title: "Welcome!", content: "This is where we greet you."},
    %{target: "submit-btn", title: "Submit", content: "Click here when you're done."}
  ]}
  run={@show_tour}
/>
```

### 3. Handle tour completion

```elixir
def handle_info({:tour_complete, "tour"}, socket) do
  {:noreply, assign(socket, show_tour: false)}
end
```

## Customization

Override default styles by passing a `classes` map:

```heex
<.live_component
  module={LiveJoyride.Component}
  id="tour"
  steps={@steps}
  run={@show_tour}
  classes={%{
    overlay: "bg-black/50",
    spotlight: "border-4 border-blue-500 rounded-lg",
    tooltip: "bg-white border border-gray-200 rounded-xl shadow-xl p-0",
    titlebar: "",  # Empty string hides the titlebar
    title: "text-lg font-bold text-gray-900",
    content: "text-sm text-gray-600",
    footer: "border-t border-gray-200 pt-3 mt-4",
    progress: "text-sm text-gray-500",
    button: "px-4 py-2 rounded border",
    button_primary: "bg-blue-500 text-white border-blue-500",
    button_back: "bg-white text-gray-700 border-gray-300",
    close: "w-4 h-4 rounded-full bg-red-500"
  }}
/>
```

### Available class keys

| Key | Description |
|-----|-------------|
| `overlay` | Dark backdrop behind spotlight |
| `spotlight` | Border around highlighted element |
| `tooltip` | Tooltip container |
| `titlebar` | Title bar (set to "" to hide) |
| `title` | Step title text |
| `content` | Step description text |
| `footer` | Footer with progress and buttons |
| `progress` | "1 of 6" text |
| `button` | Base button styles |
| `button_primary` | Next/Done button |
| `button_back` | Back button |
| `close` | Close button |

## Default Style

The default styling is inspired by classic Mac OS - a retro look with black borders and gradient backgrounds. Override with modern Tailwind classes as shown above.

## License

MIT License - see LICENSE file.