onboardly
Version:
React component library for Onboardly
181 lines (149 loc) • 4.79 kB
Markdown
# Onboardly
A simple React component library for Onboardly.
## Installation
```bash
npm install onboardly
# or
yarn add onboardly
# or
pnpm add onboardly
```
## Usage
```jsx
import { Onboardly } from 'onboardly';
function App() {
return <Onboardly
steps={[
{
target: '#element-id',
title: 'Welcome',
content: 'This is the first step of your onboarding tour.'
},
// More steps...
]}
isActive={true}
/>;
}
```
## API Reference
### `<Onboardly>` Component
The main component that provides onboarding functionality.
#### Props
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `steps` | `OnboardlyStep[]` | Yes | Array of steps for the onboarding tour |
| `isActive` | `boolean` | Yes | Controls whether the tour is running |
| `currentStep` | `number` | No | Control the current step (controlled mode) |
| `onStepChange` | `(newStep: number) => void` | No | Callback when step changes |
| `onStart` | `() => void` | No | Callback when tour starts |
| `onEnd` | `() => void` | No | Callback when tour ends |
| `classNames` | `object` | No | Custom CSS class names |
| `labels` | `object` | No | Custom button labels |
| `options` | `object` | No | Behavior configuration options |
| `onBeforeStepChange` | `(fromStep: number, toStep: number) => boolean \| Promise<boolean>` | No | Hook called before step changes |
| `onAfterStepChange` | `(currentStep: number) => void` | No | Hook called after step changes |
### `useOnboardly` Hook
A React hook that provides access to the Onboardly context. This hook must be used within an Onboardly component.
```jsx
import { useOnboardly } from 'onboardly';
function MyComponent() {
const {
currentStepIndex,
steps,
isVisible,
handleNext,
handleBack,
handleSkip,
changeStep
} = useOnboardly();
return (
<div>
{isVisible && (
<button onClick={handleNext}>
Custom Next Button ({currentStepIndex + 1}/{steps.length})
</button>
)}
</div>
);
}
```
#### Return Value
| Property | Type | Description |
|----------|------|-------------|
| `currentStepIndex` | `number` | The index of the current step |
| `steps` | `OnboardlyStep[]` | Array of steps for the tour |
| `isVisible` | `boolean` | Whether the tour is currently visible |
| `targetElements` | `Element[]` | DOM elements being targeted in current step |
| `handleNext` | `() => void` | Go to the next step |
| `handleBack` | `() => void` | Go to the previous step |
| `handleSkip` | `() => void` | Skip/end the tour |
| `changeStep` | `(nextStepIndex: number) => Promise<void>` | Go to a specific step |
| `tooltipPosition` | `object` | Current tooltip position |
| `options` | `object` | Merged options object |
| `labels` | `object` | Merged labels object |
| `classNames` | `object` | Custom CSS class names |
### Step Configuration
Each step in the `steps` array is an object with the following properties:
| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `target` | `string \| string[]` | Yes | Element ID(s) to highlight |
| `title` | `string` | Yes | Step title |
| `content` | `string` | Yes | Step content |
| `position` | `'top' \| 'bottom' \| 'left' \| 'right'` | No | Tooltip position |
| `setup` | `() => void \| Promise<void>` | No | Callback before showing step |
| `cleanup` | `() => void` | No | Callback when exiting step |
| `styles` | `object` | No | Custom styles for this step |
### Custom Styling Options
The `classNames` prop allows customizing CSS classes:
```jsx
<Onboardly
classNames={{
tooltip: 'custom-tooltip',
tooltipTitle: 'custom-title',
tooltipContent: 'custom-content',
navigationContainer: 'custom-nav',
navigationDots: 'custom-dots',
backButton: 'custom-back-btn',
nextButton: 'custom-next-btn',
skipButton: 'custom-skip-btn',
spotlightMask: 'custom-mask',
highlightBorder: 'custom-border'
}}
// ...other props
/>
```
### Behavior Options
The `options` prop provides advanced configuration:
```jsx
<Onboardly
options={{
spotlightPadding: 10,
disableOverlayClose: false,
disableKeyboardNavigation: false,
hideBackButtonOnFirstStep: true,
hideSkipButton: false,
showProgressDots: true,
highlightPulsate: true,
exitOnEscape: true,
animationDuration: 300,
maskColor: 'rgba(0,0,0,0.7)',
maskOpacity: 0.7
}}
// ...other props
/>
```
## Publishing
To publish a new version of the package to npm:
1. Update the version in `package.json`
2. Build the package:
```bash
pnpm build
```
3. Log in to npm (if not already logged in):
```bash
npm login
```
4. Publish the package:
```bash
npm publish
```